Go 并发代码评审:沿着 Context、Channel 和锁逐项排查

📅 2026/8/14 15:36:35
Go 并发代码评审:沿着 Context、Channel 和锁逐项排查
Go 并发代码评审沿着 Context、Channel 和锁逐项排查1. 先追 Context评审 Goroutine 时先确认 context 从入口一路传到数据库、RPC 和后台任务。创建 WithCancel 或 WithTimeout 后要释放异步任务若故意脱离请求也要单独定义生命周期不能悄悄沿用已经取消的上下文。2. 再看 Channel 和关闭责任Channel 应由生产者侧统一关闭接收方不要猜测何时 close。发送、接收和退出条件要放在同一段控制流里检查尤其留意无消费者发送、重复关闭和 select 中遗漏 ctx.Done 的情况。3. 锁内不要做慢操作Mutex 保护的范围只保留共享状态读写。网络请求、日志格式化和可能阻塞的 Channel 操作应移出临界区。sync.Pool、sync.Map 也不是默认优化项只有访问模式匹配时才使用。4. 让检查可重复运行 go test -race、泄漏测试和有超时的并发用例并记录触发输入。静态检查能发现一部分问题但不能替代竞争条件下的测试。评审结论应指向具体生命周期和失败路径。