Go语言技术文章
-
Go maps.Clone 可以复制 map 并让键级修改彼此独立,但它只做浅拷贝。本文从普通值、nil、空 map、自定义类型和切片 value 说明使用边界,并补上并发快照注意事项。398 收藏 -
用 iter.Pull 把 Go 的推送式 iter.Seq 转成可逐个取值的 next,并用 stop 正确处理读完、提前退出和并发调用边界。440 收藏 -
用 runtime/cgo.Handle 把包含 Go 指针的状态安全交给 C 保存和回调,说明 NewHandle、Value、Delete 的生命周期、并发边界与常见失效原因。403 收藏 -
atomic.Value 适合发布读多写少的完整配置快照,但第一次 Store 会锁定具体类型,nil 与类型混用会 panic。本文给出 *Config 封装、深拷贝规则、基准方法及 atomic.Pointer 取舍。485 收藏 -
从 Go 指针指向的内存内容与 C 是否跨调用保留地址两个边界,定位 cgo 指针规则 panic,并比较直接传字节、C 内存、cgo.Handle 和 runtime.Pinner 的安全写法。223 收藏 -
讲清 Go sync/atomic.Uint64 的自动对齐、primitive 原子函数在 32 位架构上的布局责任,以及无锁计数器的复制、快照、伪共享和分片边界。165 收藏 -
Golang · Go问答 | 2星期前 | channel · goroutine · pprof · Go问答 · context pprof 有界队列 go goroutine泄漏 无界channel
Go 原生 channel 容量固定,所谓无界 channel 多由中转 goroutine 与无限 slice 构成。本文用 goroutine profile 定位阻塞堆栈,并迁移到有界队列、context 取消与 WaitGroup 退出等待。383 收藏 -
Golang · Go教程 | 2星期前 | 性能优化 · 并发编程 · sync.Pool · 内存管理 · Go教程 · 垃圾回收 对象池 bytes.Buffer 临时对象 Go sync.Pool
sync.Pool 适合复用可随时丢弃的临时对象,不是可靠缓存或资源池。本文围绕 New、Get、Reset、Put 的借用边界,说明为什么不能依赖命中、如何避免归还后继续使用,以及怎样丢弃异常大的缓冲区。393 收藏 -
通过固定工作量对比 GOMAXPROCS,说明 CPU 配额、阻塞任务和运行时默认策略如何影响 Go 并发吞吐,并给出上线复核清单。417 收藏 -
用 Go sync.Cond 实现有界生产者消费者队列时,关键不是记住 Signal 或 Broadcast,而是让条件判断、互斥锁和唤醒动作保持同一条状态链。本文给出可迁移的实现方式与边界检查。224 收藏 -
从 G、M、P 的阻塞表现出发,把 Go 长时间 CPU 计算拆成可恢复批次,用 context、有界 worker 池和 execution trace 控制延迟、取消与并行度。319 收藏 -
掌握 Go sync.OnceValue 的一次初始化、并发调用与结果复用方式,了解 OnceValues、panic、可变指针和重置边界。132 收藏 -
讲清 Go heap profile 中 inuse_space 与 alloc_space 的统计口径、适用症状、增量采集方式和误判边界,帮助区分内存留存与分配抖动。350 收藏 -
解析 Go context.WithoutCancel 保留值却切断取消、截止时间和 Cause 的精确语义,并给出独立超时、工作队列与服务关闭边界的实践方案。396 收藏 -
用 Go execution trace 观察 goroutine 的阻塞区域,掌握 trace 文件采集、task/region 标记、go tool trace 阅读和 pprof 导出方法。283 收藏