Go语言技术文章
-
用 maps.EqualFunc 比较两个 map 时,键仍按 == 判断,值则交给自定义函数处理。本文从跨类型值、大小写规则、缺键与 nil map 讲清 API 边界,并给出生产代码选型清单。118 收藏 -
Go 用 atomic.Bool 表示一次性状态时,核心是让所有调用共享同一个对象,并用 CompareAndSwap(false, true) 竞争唯一成功者。本文区分 Load、Store、Swap 和 CompareAndSwap 的边界,说明重复调用、重置、复制和多字段一致性问题。448 收藏 -
用 Go 标准库 maps.Clone 复制 map,区分 map 容器独立与切片等 value 仍共享底层数据的边界,并给出可验证的复制方案。410 收藏 -
用 sync/atomic.Pointer 原子发布完整的 Go 配置快照,说明 Store、Load、Swap 与 CompareAndSwap 的区别,以及为什么发布后不能原地修改配置对象。446 收藏 -
围绕 sync.Pool 的临时对象语义,说明 New、Get、Put、Reset 和对象所有权边界,解释为什么 Pool 不能保存业务状态、不能依赖命中率与取出顺序,并给出缓冲区复用与方案选型示例。162 收藏 -
Go 的 sync.Cond 不负责保存通知,真正需要等待的是受锁保护的共享谓词。本文从丢失唤醒的症状出发,说明为什么必须用同一把锁配合 for 循环检查条件,并给出 Signal 与 Broadcast 的选择方法。143 收藏 -
Go x509 的 SetFallbackRoots 用于系统根证书池不可用时的兜底配置。本文说明 CertPool 构造、显式 Roots 优先级、nil 与重复调用边界,以及 GODEBUG 排查方式。397 收藏 -
使用 Go sync.OnceValue 缓存一次计算值,排查重复创建 getter、初始化阻塞与可变返回值共享问题,并说明 panic、零值和缓存生命周期的注意点。103 收藏 -
Go context.WithoutCancel 可以保留请求范围内的值,却不继承父上下文的取消信号。本文对比 Value、Done、Deadline、Err 和 Cause,并给出脱离请求后重新设置独立超时的写法。458 收藏 -
Go 的 ctx.Err() 适合判断 Canceled 和 DeadlineExceeded,context.Cause(ctx) 则能在设置取消原因后保留更具体的根因。本文用父子 Context、主动取消和超时三个场景说明两者如何配合。255 收藏 -
用 context.WithTimeoutCause 保存超时原因,用 context.Cause 区分截止时间、主动取消和上游取消。271 收藏 -
Go Ticker 动态调整周期不必重复创建对象,使用 Reset 复用同一条通道即可。本文说明周期校验、单一拥有者、暂停恢复和 Stop 清理的边界。234 收藏 -
说明 Go time.AfterFunc 的 Stop 返回值、回调竞态及 nil 通道边界,给出一次性取消并等待包装器,用 Context 请求退出、done 确认完成,避免把停止触发误当作终止回调。318 收藏 -
Go 的 time.LoadLocation 找不到 IANA 时区数据时,不应静默继续。本文说明时区数据来源、容器部署处理,以及 UTC、固定偏移和直接失败三种明确降级策略。467 收藏 -
Go 的 regexp.Regexp.SubexpIndex 可以把命名捕获组转换为 FindStringSubmatch 返回值中的稳定位置。本文说明索引映射、不存在与未匹配的区别、重复命名规则,以及如何封装安全读取逻辑。359 收藏