Go教程技术文章
-
围绕 Go sync.WaitGroup 的独立批次复用,说明 Add、Done、Wait 的阶段边界、动态追加风险和不可复制约束。272 收藏 -
Go sync.WaitGroup 的关键不是把 goroutine 等住,而是让 Add、Done 与 Wait 围绕同一批任务形成稳定配对,本文给出可直接复用的写法与排查边界。123 收藏 -
Go atomic.Value 的零值 Load 可以返回 nil,但 Store(nil) 会 panic;本文说明首次 Store 如何固定具体类型,以及如何用结构体或指针安全表达空配置状态。479 收藏 -
Go atomic.Value 适合保存读多写少的只读配置快照。本文从首次 Store、并发 Load、复制旧值到一次性替换,给出可复用的实现方式,并标出类型一致、原地修改和生命周期边界。375 收藏 -
Go atomic.Value 的关键不是可以存任意类型,而是同一个 Value 的 Store、Load、Swap 与 CompareAndSwap 必须围绕同一具体类型工作。本文用配置快照示例说明初始化、更新、nil、类型别名和复制规则。337 收藏 -
Go sync.Pool适合复用可丢弃的临时对象,不适合保存配置、连接、租户或权限等长期状态。本文从可丢弃性、Reset清理、所有权和并发边界四个方面给出判断与实现方法。279 收藏 -
讲清 Go sync.Pool 对象归还前如何清理字节切片、map 和引用字段,避免敏感内容被下一次 Get 读到,并说明清零与安全擦除的边界。372 收藏 -
Go sync.Pool适合复用临时对象,但池中对象可能被GC自动丢弃。本文把对象复用链与生命周期指标拆开,用池外原子计数器记录New、Get、Put,再用基准指标判断是否真的降低了分配压力。374 收藏 -
Go context发生取消时,ctx.Err()只能告诉你状态,context.Cause(ctx)才能保留首次取消的具体原因。本文用WithCancelCause和超时cause建立一套可排查的错误归因方法。320 收藏 -
从请求入口创建截止时间,沿 Go context 调用链传给服务层和下游阻塞操作,并说明局部子预算、取消传播、Err 判断与资源释放的实现边界。179 收藏 -
Go context.Value 适合携带请求级、跨 API 传播的元数据,不适合传业务参数或可选配置。本文用私有键类型、类型安全访问器和调用链示例划清使用边界。392 收藏 -
用 Go os/signal 和 NotifyContext 组织优雅停止:让取消信号传到后台 goroutine,等待资源收尾,并正确释放通知注册,避免服务退出后的 goroutine 泄漏。489 收藏 -
Go os/signal 的 channel 容量不是信号种类数量。本文从 Notify 的非阻塞发送、接收速度和退出生命周期出发,说明容量 1 何时足够,以及何时需要更大的缓冲。157 收藏 -
用 Go os/signal 接收 SIGINT 和 SIGTERM,将信号接入服务生命周期,说明缓冲 channel、NotifyContext、Stop 以及重复信号和平台边界。132 收藏 -
用 context.WithTimeout 和 exec.CommandContext 给外部命令设置截止时间,区分超时终止、启动失败与正常退出,并说明子进程清理边界。307 收藏