Go语言技术文章
-
用 Go atomic.Int64.Add 的新值返回语义封装并发序号生成器,并说明顺序、溢出、复制和跨进程使用边界。391 收藏 -
Golang · Go问答 | 1个月前 | 并发 · channel · goroutine · Go问答 · Go channel 关闭 channel 接收零值 双值接收 range channel
Go channel 关闭后,接收操作会在没有更多数据时返回元素类型的零值。要区分真实业务零值与关闭信号,应使用双值接收的 ok 标志,或用 range 消费到结束;本文同时说明缓冲区残留、关闭责任和重复 close 的常见边界。345 收藏 -
Go atomic.Pointer 的零值就是 nil。本文用启动 Store 和懒初始化 CAS 两种方案,说明如何把 nil 定义为未初始化状态,避免空指针解引用、重复初始化和对象字段数据竞争。153 收藏 -
Go 的 nil channel 可以让 select 分支动态失效。本文区分 nil、开放和关闭 channel,演示双输入 fan-in 如何在识别 ok=false 后安全退出。463 收藏 -
讲清 Go atomic.Uint64 的 Add 与 Load 如何完成并发计数和单值统计快照,并说明多字段状态不能靠连续 Load 自动保持一致。353 收藏 -
用 Go 泛型写切片函数时,S ~[]E 可以兼容原始切片、类型别名和底层类型相同的自定义切片。本文用一个保留返回类型的示例讲清约束、推导和边界。384 收藏 -
sync.Map.Range 不是一致快照。本文用并发 Store、Delete 和更新示例解释键集合与键值为什么会变化,并给出需要稳定结果时的快照与加锁方案。500 收藏 -
Go comparable 约束拒绝包含切片字段的结构体,是因为结构体必须保证所有字段都可比较。本文拆解切片、数组、指针和接口字段的边界,并给出固定数组、摘要键与身份指针的改造选择。217 收藏 -
Golang · Go教程 | 1个月前 | 性能优化 · 垃圾回收 · Go教程 · go bytes.Buffer Go sync.Pool Go 对象池 sync.Pool 缓存 Go 临时对象复用
sync.Pool 适合复用短生命周期对象,却不保证对象一直存在或每次 Get 都命中。本文说明 Get、New、Put 和自动移除的边界,并给出稳定缓存的替代选择。467 收藏 -
Go 泛型函数通常从调用实参建立类型关系,不能只凭接收变量的类型逆向猜出返回值中的类型参数。本文用最小示例解释推断边界,并给出显式实例化、增加输入参数和非泛型包装三种改法。128 收藏 -
sync.OnceValue 和 sync.OnceValues 只负责一次性初始化,不会把返回 error 当成自动重试信号。本文用最小示例说明错误缓存语义,并给出只缓存成功值的显式重试写法。179 收藏 -
设置 GOPRIVATE 后仍看到 proxy.golang.org 请求,通常是模块路径未匹配、GONOPROXY 覆盖或 GOPROXY 回退造成的。本文按检查、匹配、架构选择和缓存复查四步定位。281 收藏 -
Go cmp.Or 会把空字符串、数字 0 和 false 都视为零值并继续回退。本文说明它的判断边界,并用 Value 与 Valid 分离的写法保留显式零值。452 收藏 -
Go mod edit -replace 默认会改写 go.mod。本文用 go.work 和独立 modfile 两种方式隔离本地依赖替换,并给出提交与 CI 检查方法。122 收藏 -
Go maps.Keys 返回的是键迭代器,不保证每次调用顺序一致。无序诊断可以直接遍历;日志、快照、接口文本和测试若要求稳定结果,应使用 slices.Sorted 或业务比较器显式建立顺序。187 收藏