跳至内容

从 happens-before 真正理解 Go 内存模型

用 happens-before 统一解释 goroutine、Channel、Mutex、Once 和 atomic 的内存可见性,避免依赖调度时序。

更多 →

2026年6月25日

原子操作不是魔法:sync/atomic、无锁状态与适用边界

理解 typed atomic、CAS、atomic.Value 和不可变快照,识别原子操作无法保护的复合业务不变量。

更多 →

2026年6月24日

结构化并发:WaitGroup、errgroup 与并发任务收敛

让并发任务的生命周期服从调用栈:比较 WaitGroup 与 errgroup,处理错误、取消、并发上限和结果收集。

更多 →

2026年6月23日

控制并发而不是制造 Goroutine:Worker Pool、信号量与背压

从容量规划出发设计并发上限、队列和背压,比较 Worker Pool、Channel Semaphore 与 errgroup.SetLimit。

更多 →

2026年6月22日

构建不泄漏的并发流水线:Fan-out、Fan-in 与取消

从 Stage 所有权、Fan-out/Fan-in 和提前退出入手,构建能够传播取消、关闭有序且不会阻塞泄漏的 Go 流水线。

更多 →

2026年6月21日

定时器的坑:Timer、Ticker、time.After 与重置语义

结合 Go 1.23 之后的新 Timer 语义,解释一次性超时、循环复用、Ticker 停止、AfterFunc 与可测试时间设计。

更多 →

2026年6月20日

写对一个 Go HTTP 服务:超时、Context、连接复用与优雅停机

从服务端四类超时、请求 Context 和客户端连接池出发,构建能够正确限流、取消并优雅停机的 Go HTTP 服务。

更多 →

2026年6月19日

database/sql 实战:连接池、事务边界与慢查询排查

把 sql.DB 当作连接池来理解,系统处理容量配置、查询取消、事务边界和慢查询的分层排查。

更多 →

2026年6月18日

重试为什么会放大故障:超时预算、指数退避、抖动与幂等

解释多层重试如何放大故障,并用总时间预算、指数退避、Full Jitter 和幂等键建立可控重试策略。

更多 →

2026年6月17日

JSON 边界上的坑:零值、nil、omitempty、数字精度与未知字段

围绕缺失、null 与零值的语义差异,解决 JSON 集合、omitempty、PATCH 三态、数字精度和严格解码问题。

更多 →

2026年6月16日