04 2023 档案
摘要:go语言channel 设计原理 go语言中提倡:不要通过共享内存方式进行通信,而应该通过通信的方式共享内存。 在很多编程语言中,多个线程传递数据的方式一般是共享内存,为了解决线程竞争,我们需要限制同一时间能够读写这些变量的线程数量,然而这与go语言的设计并不相同。 虽然在go语言中也能使用共享内存
阅读全文
摘要:go语言time.Timer Timer是一个一次性的定时器,经过指定的时间后将会触发一个时间,通知调用的goroutine 使用方法 func main() { timer := time.NewTimer(3 * time.Second) for { select { case t := <-t
阅读全文
摘要:go语言context.Context context 是 Golang 从 1.7 版本引入的一个标准库。它使得一个request范围内所有goroutine运行时的取消可以得到有效的控制。当最上层的 goroutine 因为某些原因执行失败时,下层的 Goroutine 由于没有接收到这个信号所
阅读全文
摘要:go语言sync.Once go语言sync.Once 数据结构 为什么done放在第一个字段 Do 总结 sync.Once 是 Go 标准库提供的使函数只执行一次的实现,常应用于单例模式,例如初始化配置、保持数据库连接等。作用与 init 函数类似,但有区别。 init 函数是当所在的 pack
阅读全文
摘要:go语言sync.WaitGroup go语言sync.WaitGroup 数据结构 1.13版本的结构 1.20版本的结构 Add Done Wait 总结 WaitGroup的主要作用是,让一个或多个goroutine去等待另一组goroutine结束 数据结构 waitGroup的数据结构有过
阅读全文
摘要:go语言sync.mutex go语言sync.mutex 数据结构 Lock Unlock 总结 数据结构 type Mutex struct { state int32 sema uint32 } Mutex包含了两个字段,分别是state、sema,state表示了当前锁的状态,sema是用于
阅读全文
摘要:go语言代码规范 指南篇 编码风格原则 清晰:代码的目的和原理对读者来说是清晰的 简单:代码以最简单的方式完成其目标 简明:代码具有较高的信噪比 可维护性:编写的代码可以很容易维护 一致:代码与广泛的谷歌代码库风格一致 清晰 清晰主要是通过有效的命名、有用的注释和有效的代码组织来实现的。 清晰与否要
阅读全文
摘要:go语言内存对齐 go语言内存对齐 为什么要进行内存对齐 内存对齐规则 基本数据类型 结构体数据类型 原子操作问题 总结 比如:存储int32位和int64位的数据时 没有进行内存对齐,int64会紧跟着int32位进行内存分配 进行内存对齐,将会进行字节填充,使得int64能够从内存地址为8的倍数
阅读全文
摘要:go语言原子操作atomic.Value go语言原子操作atomic.Value 数据结构 Store Load 总结 数据结构 // A Value provides an atomic load and store of a consistently typed value. // The z
阅读全文