Go红队开发—语法补充
文章目录
- 错误控制
- 使用
- 自定义错误类型
- 错误包装
- errors.Is 和 errors.As
- panic捕获、recover 、defer
- 错误控制练习
- 接口
- 结构体实现接口
- 基本类型实现接口
- 切片实现接口
- 接口练习
- Embed嵌入文件
之前有师傅问这个系列好像跟红队没啥关系,前几期确实没啥关系,因为这都是进行红队工具开发的前置知识点,对于我个人强迫症而言只是想让这个系列更加完善而已,所以前置知识也加进去了,有GO知识的大佬可以等下一期哈!感谢支持。
错误控制
使用
1. errors.New("错误信息") //这个属于error类型
例子://你会看到error返回类型,return 0, errors.New("除数不能为零")
func divide(a, b int) (int, error) {
if b == 0 {
return 0, errors.New("除数不能为零") }
return a / b, nil
}2.fmt.Errorf:错误包装,后面会详细讲。这个函数允许你使用格式化字符串创建错误,类似于 fmt.Sprintf。
这个没啥好说的,只是说New的时候只能是字符串,而你用这个就能够格式化字符串,将变量放在里面格式化输出在错误中。
err := fmt.Errorf("invalid argument: %v", value)3.errors.Is:判断错误链中是否包含该错误
if errors.Is(err, myError) {// err 是 myError自定义
}
自定义错误类型
自定义错误类型:通过实现 error
接口来自定义错误类型。
示例代码:
package mainimport "fmt"type MyError struct {When stringWhat string
}func (e *MyError) Error() string {return fmt.Sprintf("在 %s 发生 %s ", e.When, e.What)
}
func run() error {return &MyError{When: "运行时",What: "错误1",}
}
func main() {err := run()if err != nil {fmt.Println(err)}
}
注意理解具体执行过程:
-
run()
返回一个error
接口值,其动态类型为*MyError
,动态值为&MyError{}
。 -
当执行
fmt.Println(err)
时:
err.Error()
被隐式调用。- 动态类型
*MyError
的Error()
方法被执行,返回一个字符串。
错误包装
其实很好理解,就是使用fmt.Errorf("获取数据失败: %w", err)
,这相当于用获取数据失败:
这个字符串包了一下err
所以fmt.Errorf("获取数据失败: %w", err)
解包的时候就是等于err
,因为后面的Is(is)就是为啥能判断错误链里是否包含的。
package mainimport ("errors""fmt"
)// 定义一个自定义错误
var ErrNotFound = errors.New("资源未找到")func fetchData(id int) error {if id == 0 {return ErrNotFound // 返回原始错误}return nil
}func main() {// 调用 fetchData 并包装错误err := fetchData(0)if err != nil {// 使用 fmt.Errorf 包装原始错误,添加上下文wrappedErr := fmt.Errorf("获取数据失败: %w", err)fmt.Println(wrappedErr) // 打印包装后的错误信息// 检查包装的错误是否包含特定错误if errors.Is(wrappedErr, ErrNotFound) {fmt.Println("错误类型: 资源未找到")}// 解包原始错误unwrappedErr := errors.Unwrap(wrappedErr)fmt.Printf("解包后的错误: %v\n", unwrappedErr)}
}
输出如下:(看下面的输出就知道什么情况了)
获取数据失败: 资源未找到
错误类型: 资源未找到
解包后的错误: 资源未找到
errors.Is 和 errors.As
了解了错误包装之后就知道这两的区别了,Is就是判断错误链中是否包含你这个错误,只要包含一个即可。
As就是只判断当前的,不管你是否包含的。
package mainimport ("errors""fmt"
)var ErrDivideByZero = errors.New("除数不能为零")func divide(a, b int) (int, error) {if b == 0 {return 0, ErrDivideByZero}return a / b, nil
}
func main() {_, err := divide(4, 0)if errors.Is(err, ErrDivideByZero) { //可以是ErrDivideByZero错误的错误链,因为有可能是进行了错误包装fmt.Println("捕获到除以零的错误")} else {fmt.Println("其他错误:", err)}if errors.As(err, &ErrDivideByZero) { //一定要是ErrDivideByZero错误,同时要是一个指针,源码的painc写着target must be a non-nil pointerfmt.Println("捕获到除以零的错误")} else {fmt.Println("其他错误:", err)}
}
panic捕获、recover 、defer
解释:
panic
能够改变程序的控制流,调用panic
后会立刻停止执行当前函数的剩余代码,并在当前 Goroutine 中递归执行调用方的defer
;recover
可以中止panic
造成的程序崩溃。它是一个只能在defer
中发挥作用的函数,在其他作用域中调用不会发挥作用;
注意:recover 只能在 defer 函数中调⽤,并且只有在 panic 发⽣时才会返回⾮ nil
值。
//恐慌捕获 panic recover defer
func start_panic() {defer func() {//使用defer来等待后面panic执行一个panic后再进行捕获if r := recover(); r != nil {fmt.Println("捕获到了:", r)}}()panic("一个panic")
}func main() {fmt.Println("开始捕获panic")start_panic()fmt.Println("结束捕获panic")
}
错误控制练习
固定打开一个1.txt文件,然后使用自定义错误类型,同时进行panic捕获,输出预期:错误,非预期:错误
type FileNotFoundError struct {filename string
}func (f FileNotFoundError) Error() string {return fmt.Sprintf("文件 %s 不存在。", f.filename)
}func readfile(file_name string) (string, error) {//panic一下defer func() {if r := recover(); r != nil {fmt.Println("panic is ", r)}}()if file_name != "1.txt" {return "", FileNotFoundError{filename: file_name}}bytes, err := os.ReadFile("1.txt")if err != nil {return "", fmt.Errorf("文件 %s 打开出错", file_name)} else {return string(bytes), nil}
}func main() {file, err := readfile("1.txt")if err != nil {if errors.As(err, FileNotFoundError{}) {fmt.Println("预期错误:", err)} else {fmt.Println("非预期错误:", err)}return}fmt.Println("文件内容为:", file)
}
接口
接口在go语言中也有点抽象,对于接口的实现其实很简单,只是在用的时候比较抽象,结构体实现接口反而是最容易接受的,像基本类型还有切片这两种接口的使用就比较抽象。
结构体实现接口
(在结构体实现结构以及方法的调用基本没啥问题,很正常的操作)
package mainimport "fmt"type User interface {getName() stringgetAge() int
}type Person struct {name stringage int
}func (p Person) getName() string {return p.name
}
func (p Person) getAge() int {return p.age
}func main() {p := Person{name: "zhangsan",age: 18,}fmt.Println(p.getName(), p.getAge())
}
基本类型实现接口
这里我分两种情况,string和int实现接口,目的是了解在实现接口后怎么使用这个方法。
type Stringer interface {
//接口的这两个方法写了之后就要实现。所以下面就实现了String() stringAscii() string
}
type MyString string //string类型
type MyInt int //int类型func (s MyString) String() string {return string(s) //其实可以不转string也能直接返回,因为MyString本身就是string类型,只是我换了个别名而已
}
func (t MyInt) Ascii() string {return string(t) //一定要转,因为本身是int类型
}
func (t MyInt) String() string {return fmt.Sprintf("%d", t) //一定要转,因为本身是int类型
}func main() {//结构体实现接口效果//start_struct_interface()var s Stringer = MyString("传递参数string") var i Stringer = MyInt(97)fmt.Println(s.String())fmt.Println(i.Ascii()) //将数字转为asciifmt.Println(i.String()) //将数字作为字符串输出
}
细节:
实际操作下来其实也没有说很难理解,只是可能类型转换那个地方卡了一下导致难以理解而已
重点是看懂这里的代码:
var s Stringer = MyString("传递参数string")
var i Stringer = MyInt(97)
接口类型接收实现了接口方法的类型,然后就能够调用接口方法了,就这么理解就行了。在MyString和MyInt中都是强制类型转换,将string字符和int数字转为对应的别名,然后给到变量后就能直接使用实现了接口的方法,因为已经转为了那两个基本类型了。
在强调一遍:本身是没有我们定义的这种类型的,所以要强制转换,然后接口其实就能随便写了,管你要不要用他这个值。
条件:
属于这个类型(强制类型转换)
实现了接口方法(正常实现接口方法)
调用就直接调用即可(正常)
切片实现接口
其实到了切片实现接口就很容易理解了
我发现其实是你这个类型实现了这个接口后,就可以用了
我发现要用这个方法只是仅仅的需要你是这个类型,而不是说在于什么强制类型转换,而是你要用这个接口方法是因为那个类型实现了这个接口啊,所以你要强制类型转换,所以要实例化这个类型啊,确实有点悟道了,也有点不明白我之前到底为啥会卡住。
切片实现接口也很简单,到这里其实已经不分什么结构体、基本类型、切片的了,本质就是你实例化一个实现了接口的类型,然后你的某个类型实现了接口类型的方法,那么你就直接实例化给到接口类型就拿这个类型去调用方法就行了。 (有点抽象,还是直接看代码吧)
type I_slice interface { //接口类型sum() int //返回切片的和
}
type MySlice []int //切片类型,换一个intslice别名而已,方便自定义,且实现接口方法func (ms I_slice) sum() int { //就是自己定义的类型实现了接口类型而已,很好理解s := 0for _, v := range ms {s += v}return s
}func main() {var s I_slice = MySlice{1, 2, 3, 4, 5} //我们自己自定义的切片类型然后赋值给接口类型//var s MySlice = MySlice{1, 2, 3, 4, 5} //var s = MySlice{1, 2, 3, 4, 5} //这两其实也可以,就是我们自定义的类型本来就是有实现这个方法的,只不过你没有赋值给接口类型,所以不算实现了接口的方法而已,但是你本身就拥有的方法当然可以用啦fmt.Println(s.sum())
}
接口练习
项⽬描述
创建⼀个形状计算器,它可以计算不同形状的⾯积。需要定义⼀个 Shape 接⼝,
并为不同的形状(如圆形和矩形)实现这个接⼝。
然后编写⼀个函数来计算并打印这些形状的⾯积。 步骤
定义⼀个 Shape 接⼝,包含⼀个 area ⽅法。
创建⼀个 Circle 结构体,并实现 Shape 接⼝。
创建⼀个 Rectangle 结构体,并实现 Shape 接⼝。
编写⼀个函数 printArea,接受⼀个 Shape 类型的参数,并打印它的⾯积。
在 main 函数中创建⼀些 Circle 和 Rectangle 实例,并调⽤ printArea 函数来打印它们的⾯积。
示例代码
type Shape interface {Area() float64
}type Circle struct {radius float64
}type Rectangle struct {width float64height float64
}func (c Circle) Area() float64 {return (c.radius * c.radius * math.Pi)
}
func (r Rectangle) Area() float64 {return (r.width * r.height)
}func printArea(s Shape) {/*这里实际上就相当于强制类型转换了,因为两个结构体实现了Area方法,那么就强制类型转换为Shape后能够在函数中正常使用该方法*/fmt.Printf("%.2f\n", s.Area())
}
func main() {dc := Circle{radius: 2}r := Rectangle{width: 2, height: 4}printArea(c)printArea(r)
}
Embed嵌入文件
只支持嵌入为string, byte切片和embed.FS
三种类型。相对来说比较难理解的是embed.FS
。
使⽤//go:embed后,下⽅必须是全局变量
。
使用embed可以嵌⼊⽂件夹下的⽂件,使⽤通配符*,比如static/*
示例代码:
package mainimport ("embed"_ "embed""fmt"
)//go:embed a.txt
var a string//go:embed static/1.txt
var s []byte//go:embed static/*
var f1 embed.FS//go:embed static/* static/2.txt
var f2 embed.FS//go:embed static/1.txt
//go:embed static/2.txt
//go:embed static/3.txt
var f3 embed.FSfunc main() {fmt.Println("============string接收================")fmt.Println(a)fmt.Println("============byte接收================")fmt.Printf("%q\n", s)fmt.Println(string(s))fmt.Println("============FS单个文件================")data, _ := f1.ReadFile("static/1.txt")fmt.Println(string(data))fmt.Println("============FS目录,当前目录等等多个文件,go:embed空格隔开================")data, _ = f2.ReadFile("static/2.txt")fmt.Println(string(data))fmt.Println("============FS多个文件,go:embed可以不用空格隔开================")data, _ = f3.ReadFile("static/3.txt")fmt.Println(string(data))
}
相关文章:
Go红队开发—语法补充
文章目录 错误控制使用自定义错误类型错误包装errors.Is 和 errors.Aspanic捕获、recover 、defer错误控制练习 接口结构体实现接口基本类型实现接口切片实现接口 接口练习Embed嵌入文件 之前有师傅问这个系列好像跟红队没啥关系,前几期确实没啥关系,因为…...
【VSCode】VSCode下载安装与配置极简描述
VSCode 参考网址:[Visual Studio Code Guide | GZTime’s Blog]. 下载安装 下载地址:Download Visual Studio Code - Mac, Linux, Windows. 注:推荐不更改安装位置,并且在附加任务中“其他”中的四项全部勾选,即将用…...
揭开人工智能中 Tokens 的神秘面纱
揭开人工智能中 Tokens 的神秘面纱 在人工智能,尤其是自然语言处理(NLP)领域,"tokens" 是一个频繁出现且至关重要的概念。对于理解语言模型如何处理和理解人类语言,tokens 起着基础性的作用。那么ÿ…...
Node.js安装与学习的简单记录
1. 下载与安装 参考: 2024最新版Node.js下载安装及环境配置教程【保姆级】 Node.js中文网 选择长期维护版: 18.19.0,Windows 安装包 (.msi) 64位。 安装选项都默认,安装路径可以改一下。 查看node版本:node -v v18.19.0 查看npm版…...
Spring也能接入Deepseek?
引言 最近DeepSeek可谓风光无限,AI可谓是目前互联网最火热的几个名词,我也一直在关注他的发展,从以前的人工智障,到chatGPT的高不可攀(价格太贵),再到DeepSeek的横空出世,才看到了A…...
STM32 物联网智能家居 (七) 设备子系统--风扇控制
STM32 物联网智能家居 (七) 设备子系统–风扇控制 一、概述 下面我们来讲解设备子系统中的风扇控制,这是我们设备子系统中的最后一章,相信前面大家一家掌握了这种架构分层的编程思想,后续会很容易将程序进行扩展和开发。 上一节我们介绍了OLED屏幕的编程思想,有很多小伙…...
MySQL—Keepalived+MySQL双主复制实现MySQL高可用
Keepalived原理: Keepalived 的原理主要基于虚拟路由冗余协议(VRRP,Virtual Router Redundancy Protocol)、健康检查机制和负载均衡机制,以下为你详细介绍: VRRP 协议实现高可用:VRRP 是 Keep…...
CSS 使用white-space属性换行
一、white-space属性的常见值 * 原本格式: 1、white-space:normal 默认值,空格和换行符会被忽略过滤掉;宽度不够时文本会自动换行 * 宽度足够时,normal 处理后的格式 * 宽度不够时, normal 处理后的格式 2、white-spa…...
【数据结构第十六节】实现链式结构二叉树(详细递归图解—呕心沥血版!)
必须有为成功付出代价的决心,然后想办法付出这个代价。云边有个稻草人-CSDN博客 这节课挺抽象(苦笑),没事,我会帮你!干就完了! (目录在路上) 正文开始—— 引言 用链表…...
mysqldump 参数详解
mysqldump 是一个用于备份 MySQL 数据库的工具。它可以生成一组 SQL 语句,这些语句可以用来重现原始数据库对象定义和表数据。以下是一些常用的 mysqldump 参数及其详细解释: 常用参数 基本参数 --host=host_name, -h host_name: 指定 MySQL 数据库主机地址,默认为 localh…...
Vue-Flow绘制流程图(Vue3+ElementPlus+TS)简单案例
本文是vue3Elementplusts框架编写的简单可拖拽绘制案例。 1.效果图: 2.Index.vue主代码: <script lang"ts" setup> import { ref, markRaw } from "vue"; import {VueFlow,useVueFlow,MarkerType,type Node,type Edge } fro…...
【11】RUST使用cargo组织crate
文章目录 使用cargo组织crate重导出编译文档生成测试 cargo组织工作空间 TODOcrate.io账号 TODO暂时不看发布crate 使用cargo组织crate 重导出 在模块顶部使用pub use self::重导出,方便使用模块时候直接使用use mod_X::xxx。从而隐藏crate内部模块的结构。方便向…...
开放标准(RFC 7519):JSON Web Token (JWT)
开放标准:JSON Web Token 前言基本使用整合Shiro登录自定义JWT认证过滤器配置Config自定义凭证匹配规则接口验证权限控制禁用session缓存的使用登录退出单用户登录Token刷新双Token方案单Token方案 前言 JSON Web Token (JWT) 是一种开放标准…...
Linux上用C++和GCC开发程序实现不同MySQL实例下单个Schema之间的稳定高效的数据迁移
设计一个在Linux上运行的GCC C程序,同时连接两个不同的MySQL实例,两个实例中分别有两个Schema的表结构完全相同,复制一个实例中一个Schema里的所有表的数据到另一个实例中一个Schema里,使用以下快速高效的方法,加入异常…...
【Windows】Windows常用命令
目录 文件和目录相关命令系统信息查看命令网络相关命令进程管理命令磁盘管理命令用户和权限管理命令计划任务和脚本命令其他常用命令1. 文件和目录相关命令 命令作用示例cd切换目录cd C:\Usersdir列出目录内容dirmkdir创建新目录mkdir NewFolderrmdir删除空目录rmdir OldFolder…...
趣讲TCP三次握手
一、TCP三次握手简介 TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。在TCP连接中,只有两方进行通信,它使用校验和、确认和重传机制来保证数据的可靠传输。…...
vue3中的标签属性中的Ref
用在普通 DOM 标签上,获取的是 DOM 节点: 当你在一个普通的 HTML 标签(例如 <div>、<input> 等)上使用 ref 属性时,ref 会返回该 DOM 元素的直接引用。这使得你可以在 JavaScript 代码中方便地访问和操作…...
vue3.2 + vxe-table4.x 实现多层级结构的 合并、 展开、收起 功能
<template><div style"padding: 20px"><vxe-table border :data"list" :height"800" :span-method"rowspanMethod"><vxe-column title"一级类目" field"category1"><template #defaul…...
DeepSeek R1 + 飞书机器人实现AI智能助手
效果 TFChat项目地址 https://github.com/fish2018/TFChat 腾讯大模型知识引擎用的是DeepSeek R1,项目为sanic和redis实现,利用httpx异步处理流式响应,同时使用buffer来避免频繁调用飞书接口更新卡片的网络耗时。为了进一步减少网络IO消耗&…...
Java虚拟机监控工具
在Java应用高频出现的OOM、卡顿、线程阻塞等问题背后,往往隐藏着复杂的JVM运行机制异常。本文将通过真实案例场景,演示6款主流工具的组合使用技巧,助你快速定位90%以上的线上故障。 一、基础监控三板斧 1. jstat:GC性能透视仪 …...
利用python和gpt写一个conda环境可视化管理工具
最近在学习python,由于不同的版本之间的差距较大,如果是用环境变量来配置python的话,会需要来回改,于是请教得知可以用conda来管理,但是conda在管理的时候老是要输入命令,感觉也很烦,于是让gpt帮…...
软件工程----统一过程模型RUP
统一过程RUP是一种以用例驱动、以体系结构为核心、迭代和增量的软件开发过程,由UML方法和工具支持,广泛应用于各类面向对象项目。 RUP本身支持可裁剪性,可应付给类领域软件和不同的项目规模 RUP蕴含了大量优秀的实践方法,如&…...
Spring的MutipartFile 会直接将流转成文件存放在临时目录嘛?
Spring 的 MultipartFile 默认会将上传的文件存储到临时目录。具体行为取决于底层的 MultipartResolver 实现。常见的实现包括: 1. StandardServletMultipartResolver(默认实现) 如果使用的是 StandardServletMultipartResolver(…...
基于大数据的空气质量数据可视化分析系统
【大数据】基于大数据的空气质量数据可视化分析系统(完整系统源码开发笔记详细部署教程)✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 本系统的实践价值在于将大数据技术与空气质量监测相结合,为公众、研究机构和政府…...
一文了解:部署 Deepseek 各版本的硬件要求
很多朋友在咨询关于 DeepSeek 模型部署所需硬件资源的需求,最近自己实践了一部分,部分信息是通过各渠道收集整理,so 仅供参考。 言归正转,大家都知道,DeepSeek 模型的性能在很大程度上取决于它运行的硬件。我们先看一下…...
国内访问Github的四种方法(2025版)
声明:以下内容,仅供学习使用,不得他用。如有他用,与本文作者无关。 国内访问GitHub及下载文件的解决方案整理如下,结合最新技术方案和实测有效方法: 一、网络层解决方案 Hosts文件修改法 通过DNS查询工具…...
企业级AI办公落地实践:基于钉钉/飞书的标准产品解决方案
一、平台化AI的崛起:开箱即用的智能革命 2024年企业AI应用调研数据显示: 73%的中型企业选择平台标准产品而非自研头部SaaS平台AI功能渗透率达89%典型ROI周期从18个月缩短至3-6个月 核心优势对比: 维度自研方案平台标准产品部署周期6-12个…...
金融行业专题|某基金公司基于超融合信创平台支持人大金仓数据库的性能评测
随着“自主可控”在 IT 基础设施领域不断深化,数据库的国产化替代也被很多金融机构提上日程。为了保证性能,大部分国产数据库都基于信创架构的裸金属服务器部署。在国产虚拟化/超融合平台上,国产数据库性能表现如何?尤其是搭配信创…...
Python异常处理面试题及参考答案
目录 什么是 Python 中的异常?程序为什么需要异常处理机制? 解释 BaseException 和 Exception 的区别 Python 的异常处理与传统的错误代码返回机制相比有哪些优势? 列出至少 5 个 Python 内置异常类型并说明触发场景 语法错误 (SyntaxError) 与运行时异常 (Runtime Erro…...
Java 实现快速排序算法:一条快速通道,分而治之
大家好,今天我们来聊聊快速排序(QuickSort)算法,这个经典的排序算法被广泛应用于各种需要高效排序的场景。作为一种分治法(Divide and Conquer)算法,快速排序的效率在平均情况下非常高ÿ…...
【JavaSE-1】初识Java
1、Java 是什么? Java 是一种优秀的程序设计语言,人类和计算机之间的交流可以借助 Java 这种语言来进行交流,就像人与人之间可以用中文、英语,日语等进行交流一样。 Java 和 JavaScript 两者有关系吗? 一点都没有关系!!! 前端内容:HTML CSS JS,称为网页三剑客 2、JDK 下…...
JavaScript将:;隔开的字符串转换为json格式。使用正则表达式匹配键值对,并构建对象。多用于解析cssText为style Object对象
// 使用正则表达式匹配键值对,并构建对象 let string2Json(s)>{const r {};s.replace(/;/g, ;).replace(/\;/g, \n).replace(/:/g, :).replace(/\n/g, \n)//合并多个换行符.split(\n).forEach(item > {const [k, v] item.split(:);(k…...
lvgl运行机制分析
lv_timer_handler() 是 LVGL 的“心脏”:这个函数会依次做以下事情: 处理定时器(如动画、延迟回调)。 读取输入设备(如触摸屏、按键的状态)。 刷新脏区域(仅重绘屏幕上发生变化的区域…...
紧跟潮流,将 DeepSeek 集成到 VSCode
Visual Studio Code(简称 VSCode)是一款由微软开发的免费开源代码编辑器,自 2015 年发布以来,凭借其轻便、强大、且拥有丰富扩展生态的特点,迅速成为了全球开发者的首选工具。VSCode 支持多平台操作系统,包…...
Apache Tomcat RCE 稳定复现 保姆级!(CVE-2024-50379)附视频+POC
原文链接 Apache Tomcat 最新RCE 稳定复现分析 保姆级!!!附复现视频POC 前言 最近爆出 Apache Tomcat条件竞争导致的RCE,影响范围当然是巨大的,公司也及时收到了相关情报,于是老大让我复现,以…...
【文献阅读】A Survey on Model Compression for Large Language Models
大语言模型模型压缩综述 摘要 大语言模型(LLMs)已成功变革了自然语言处理任务。然而,其庞大的规模和高昂的计算需求给实际应用带来了挑战,尤其是在资源受限的环境中。模型压缩已成为应对这些挑战的关键研究领域。本文对大语言模…...
利用shardingsphere-proxy对mysql分片
本文介绍利用shardingsphere-proxy分库分表的配置过程。shardingsphere-proxy是一个中间件,启动后会模拟成一个实际的mysql服务,我们可以通过可视化工具或jdbc操作,实际执行的sql会通过shardingsphere-proxy转换,进而在具体的mysq…...
AI智能体与大语言模型:重塑SaaS系统的未来航向
在数字化转型的浪潮中,软件即服务(SaaS)系统一直是企业提升效率、优化业务流程的重要工具。随着AI智能体和大语言模型(LLMs)的迅速发展,SaaS系统正迎来前所未有的变革契机。本文将从AI智能体和大语言模型对…...
mapbox基础,使用geojson加载heatmap热力图层
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象1.2 ☘️mapboxgl.Map style属性1.3 ☘️heatmap热力图层样式二、🍀使用geojs…...
python环境打包2 pytorch和cuda的安装逻辑
基本逻辑 理一理安装pytorch的一列逻辑,以及他的依赖。(看完这小节再实践) 配置pytorch,安装步骤为:显卡驱动-->python-->cuda--->pytorch。 pytorch是依赖conda的,conda是依赖python的。 &am…...
hot100-矩阵
240.搜索二维矩阵② 编写一个高效的算法来搜索 mxn 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性: 每行的元素从左到右升序排列。 每列的元素从上到下升序排列。 思路: 输入矩阵: 从标准输入读取矩阵的行数 n 和列数 m。 按…...
扩散模型基本概念
1. 核心思想 从最原始的DDPM来讲,扩散模型是用变分估计训练的马尔可夫链,相当于VAE+流模型。与标准化流相比,扩散模型的正向过程为预先定义的加噪过程,负责将图像 x ∼ p ( x ) x\sim{p(x)} x∼...
【Python 入门基础】—— 人工智能“超级引擎”,AI界的“瑞士军刀”,
欢迎来到ZyyOvO的博客✨,一个关于探索技术的角落,记录学习的点滴📖,分享实用的技巧🛠️,偶尔还有一些奇思妙想💡 本文由ZyyOvO原创✍️,感谢支持❤️!请尊重原创…...
网络协议 HTTP、HTTPS、HTTP/1.1、HTTP/2 对比分析
1. 基本定义 HTTP(HyperText Transfer Protocol) 应用层协议,用于客户端与服务器之间的数据传输(默认端口 80)。 HTTP/1.0:早期版本,每个请求需单独建立 TCP 连接,效率低。HTTP/1.1&…...
Mysql COUNT() 函数详解
简介 COUNT()函数定义 COUNT()函数是SQL中常用的 聚合函数 ,用于统计满足特定条件的记录数。它可以灵活地应用于各种查询场景,帮助用户快速获取所需的数据统计信息。该函数不仅能够计算所有行的数量,还能针对特定列进行计数,并支…...
Redis缓存一致性难题:如何让数据库和缓存不“打架”?
标题:Redis缓存一致性难题:如何让数据库和缓存不“打架”?(附程序员脱发指南) 导言:当数据库和缓存成了“异地恋” 想象一下:你刚在美团下单了一份麻辣小龙虾,付款后刷新页面&#…...
WIn32 笔记:本专栏课件
专栏导航 上一篇:在VS2019里面,调整代码字体大小 回到目录 下一篇:计算机基础:二进制基础01,比特与字节 本节前言 在之前的讲解里面,我讲解了 Visual Studio 软件的一些个基础操作步骤。从本节开始&am…...
设置同一个局域网内远程桌面Ubuntu
1、安装xrdp: 打开终端,运行以下命令来安装xrdp: sudo apt update sudo apt install xrdp 2、启动 XRDP 并设置开机自启 sudo systemctl start xrdp sudo systemctl enable xrdp 3、验证 XRDP 运行状态 sudo systemctl status xrdp 如果显示 active (ru…...
Spring Boot 自定义 Starter 完整实战手册
Spring Boot 自定义 Starter 完整实战手册 一、核心概念与项目结构 1. 什么是 Starter? 本质:预配置模块 依赖集合 自动配置类 默认实现核心价值: 统一技术栈:团队快速复用标准组件简化配置:隐藏复杂实现细节&…...
C++ 红黑树万字详解(含模拟实现(两种版本))
目录 红黑树的概念 红黑树的性质 红黑树的删除 红黑树与AVL树的比较 红黑树的应用 红黑树的模拟实现 红黑树的概念 红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。 通过对任何一条从根到叶…...