
go后端开发
文章平均质量分 56
go技术栈和后端开发技能
tianjiajie404
这个作者很懒,什么都没留下…
展开
-
数据卷笔记
【代码】数据卷笔记。原创 2025-03-17 08:05:03 · 165 阅读 · 0 评论 -
CAP原则
CAP原则是分布式系统设计中的一个重要理论,帮助开发者理解分布式系统在一致性、可用性和分区容错性之间的权衡关系。在实际设计中,需要根据业务需求和系统特性选择合适的策略,以达到最佳的系统性能和用户体验。原创 2025-03-07 21:30:02 · 418 阅读 · 0 评论 -
Redis 中 string 和 list 的原理说明
Redis有5种基础数据结构,对应的value分别为:string (字符串)、list (列表)、set (集合)、hash (哈希) 和 zset (有序集合)原创 2025-03-06 20:55:35 · 777 阅读 · 0 评论 -
Docker 常用指令手册(学习使用)
【代码】Docker 常用指令手册(学习使用)原创 2025-03-01 20:51:36 · 323 阅读 · 0 评论 -
Linux(centOS) 命令提示符格式修改(PS1)
可以通过修改PS1的值来自定义命令提示符。原创 2025-02-27 21:18:00 · 515 阅读 · 0 评论 -
Go语言中使用viper绑定结构体和yaml文件信息时,标签的使用
在Go中使用Viper将YAML配置绑定到结构体时,主要依赖 `mapstructure` 标签(而非 `json` 或 `yaml` 标签)实现字段名映射。4. **环境变量覆盖**:可通过 `viper.AutomaticEnv()` 允许环境变量覆盖配置,但需设置 `mapstructure` 兼容的键名。3. **嵌套匹配**:嵌套结构体必须通过 `mapstructure` 标签逐级指定父键。2. **标签优先级**:`mapstructure` 标签优先级高于默认的字段名转换。原创 2025-02-22 21:13:05 · 1115 阅读 · 0 评论 -
Git安装至使用全流程说明
Git安装至使用全流程说明原创 2023-09-15 16:17:39 · 134 阅读 · 0 评论 -
golang语言Map入门笔记
* 使用 make 函数 */ map_variable := make(map[KeyType]ValueType, initialCapacity)其中 KeyType 是键的类型,ValueType 是值的类型,initialCapacity 是可选的参数,用于指定 Map 的初始容量。Map 的容量是指 Map 中可以保存的键值对的数量,当 Map 中的键值对数量达到容量时,Map 会自动扩容。如果不指定 initialCapacity,Go 语言会根据实际情况选择一个合适的值。原创 2024-05-10 17:33:58 · 202 阅读 · 0 评论 -
Go语言中Map的自动扩容机制
哈希表是用空间换时间的结构,但是在扩容是会非常耗时,因此在对时间性能有要求的情况下,应该预估map设定的大小,尽量避免扩容操作。的扩容操作,扩容操作会重新分配更大的哈希表,将原有的键值对重新哈希到新的哈希表中。在触发扩容后,Go 会创建一个新的哈希表,其大小默认是当前哈希表大小的两倍。中的元素数量达到当前哈希表大小的 6.5 倍时,Go 会触发扩容操作。遍历原有的哈希表,将每个键值对重新计算哈希值,并插入到新的哈希表中。扩容完成后,释放原有的哈希表内存空间,将新的哈希表作为。扩容完成后,可以继续往。原创 2024-05-11 12:41:18 · 504 阅读 · 1 评论 -
golang使用git远程仓库下载工具包报错module declares its path as: xxx but was required as:xxx
看了网上好几个解决方法,依然报错。最后发现是项目忘记设置国内代理。设置->Go->Go模块。添加gopro,值为。然后再去下载就可以了。原创 2024-07-29 15:49:15 · 331 阅读 · 0 评论 -
map补充
(4)hash冲突:由于输入与(key)无穷大,输出域(hash值)有限,因此必然存在不同key映射到相同hash值的情况,称之为hash冲突。(2)hash的离散型:重要两个key不相同,不论其相似度的高低,产生的hash的值都会在整个输出域内均匀的离散化。(3)采用渐进迁移,每当桶被实际操作到时都迁移一部分的元素到新桶中,避免因为一次性的大量数据迁移引发性能抖动。(3)hash的单向性:企图通过hash值反向映射回key是无迹可寻的。(1)hash的可重入性:相同的key,必然产生相同的hash值。原创 2024-05-26 19:48:32 · 257 阅读 · 0 评论 -
mod笔记
将已安装的模块更新到最新版本或指定的版本:go get -u。第三方依赖包的下载地址:$GOPATH/pkg/mod。下载第三方包,但是不依赖(不下载间接依赖)查看依赖的路径,即在哪里使用了这个依赖。下载第三方包,且依赖(下载间接依赖)清理当前模块生成的临时文件。依赖对齐(下载间接依赖)手动编辑go.mod文件。原创 2024-10-27 11:45:19 · 258 阅读 · 0 评论 -
log日志级别
日志级别:原创 2024-10-13 16:57:43 · 553 阅读 · 0 评论 -
go并发知识点整理
A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中的多个线程之间可以并发执行。D.协程:独立的栈空间,共享堆空间,调度由用户自己控制,本质上有点类似于用户级线程,这些用户级线程的调度也是自己实现的。import ("fmt"// idId int// 需要计算的随机数// 这里必须传对象实例。原创 2024-11-17 21:48:22 · 614 阅读 · 0 评论 -
go对redis基础操作
【代码】go对redis基础操作。原创 2024-12-01 17:45:00 · 157 阅读 · 0 评论 -
通道的使用
通道中的数据是占用资源的,使用后及时关闭通道,可以保护数据安全,防止资源泄露;使用Go通道的一个基本原则:不要在接收方关闭通道,确保关闭通道的是唯一发送方。也可以使用``sync.Mutex`避免多次关闭同一通道。有缓冲通道赋值后,值会进入缓冲区,在缓冲区满后阻塞。发送和接收的交互行为是同步的,且无法单独存在。不要关闭(或者发送值到)已经被关闭了的通道。1、通道中的资源可能会泄露。情况1:单生产者,单消费者。情况2:单生产者,多消费者。情况3:多生产者,单消费者。优雅的关闭方案:使用。原创 2024-07-11 14:08:13 · 362 阅读 · 0 评论 -
golang slice的扩容大小
golang的slice扩容已经有很多文章讲解,其中主流的说法是:slice底层由数组实现,当len大于cap时,底层数组翻倍,若翻倍后超过了1024,则扩容为原来的1.25倍。但是我实际操作中,扩容并不按照这个规律,而是按照go环境文件里sizeclass.go中设定好的阈值进行增长。扩容后的字节大小,放入其中butes/obj那一列,向上取整,就是得到的新切片slice。原创 2024-06-02 22:01:16 · 269 阅读 · 0 评论 -
golang slice知识点
diySlice2 在diySlice基础上添加两个元素,1,2,此时len为3,超出了cap的值2,所以扩容,创建新数组,diySlice2 指向新数组,len为3,cap为2 * 2 = 4, 元素8,1,2。golang的slice底层依靠数组实现,它包括三个部分:指向数组的指针、切片的长度和切片的容量,本质就是一个指向固定大小数组的指针,当大小超过数组时就创建新的,更大的数组,然后指向新数组。diySlice3 在diySlice 的基础上添加了8,len为2,内容为1,8。原创 2024-06-02 22:30:59 · 287 阅读 · 1 评论 -
WebSocket编程
WebSocket简介:WebSocket是一种在单个TCP连接上进行全双工通信的协议WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输需要安装第三方包:cmd中:go get -u -v github.com/gorilla/websocket聊天室示例:server.go文件代码package mainimpor原创 2024-12-08 15:14:32 · 697 阅读 · 0 评论 -
go语言编译的初始化顺序
函数运行之前,Go会依次初始化每个被导入的包中的全局变量。按照包的导入顺序依次执行,自动调用,不能显示调用。每个包的全局变量在程序运行时都会被自动初始化。函数执行完毕后,程序会进入。函数,开始执行主程序。都会在全局变量之后和。原创 2025-01-18 21:54:50 · 257 阅读 · 0 评论 -
GMP底层
P是用来调度G的执行,所以每个P都有自己的一个G的队列,当G队列都执行完毕后,会从global队列中获取一批G放到自己的本地队列中,如果全局队列也没有待运行的G,则P会再从其他P中窃取一部分G放到自己的队列中。当 P 的局部队列里面的 G 运行完毕之后,会用全局队列获取 G,在获取的过程中,会加锁。P 和 M 的数量没有固定的搭配关系(默认M>P),当一个 M 阻塞了,P 会发生 hand off,与其他空闲的 M 结合,或者产生新的 M。schedt结构体用来保存调度器的状态信息和。原创 2025-01-25 20:28:17 · 1041 阅读 · 0 评论 -
Template模板的基础使用
函数名功能描述示例and函数返回它的第一个空参数或者最后一个参数。即and x y等价于。所有参数都会执行or返回第一个非空参数或者最后一个参数。or x y等价于。所有参数都会执行not返回单个参数的布尔值的否定{{not .X}}len返回参数的整数类型长度index执行结果为第一个参数以剩下的参数为索引/键指向的值print等效于fmt.Sprintprintf等效于println等效于html返回参数文本表示的 HTML 逸码等价表示urlquery。原创 2025-02-16 19:28:28 · 567 阅读 · 0 评论 -
golang单元测试
默认情况下,每个基准测试至少运行1秒。如果在Benchmark函数返回时没有到1秒,则b.N的值会按1,2,5,10,20,50,…*,基准测试必须要执行b.N次,这样的测试才有对照性,b.N的值是系统根据实际情况去调整的,从而保证测试的稳定性。之前的处理不会放到执行时间里,也不会输出到报告中,所以可以在之前做一些不计划作为测试报告的操作。-benchmem**参数,来获得内存分配的统计数据)基准测试并不会默认执行,需要增加**-bench。基准测试以Benchmark为前缀,需要一个。原创 2025-01-11 20:14:50 · 917 阅读 · 0 评论