Go race detector
Go race detector 用于在运行时发现并发读写同一内存位置的数据竞争,是并发安全排查的重要工具。
#type / concept
#status / growing
#tech / dev
#resource / go
[!info] related notes
- 所属 MOC: Go 测试与质量 MOC, Go 性能与诊断 MOC
- 前置概念: Go goroutine, Go sync 包
- 相邻概念: Go channel
Go race detector
一句话定义
Go race detector 是 Go 工具链提供的运行时竞态检测能力,用来发现多个 goroutine 对同一内存位置的不安全并发访问。
核心机制 / 工作原理
最常见的使用方式是:
go test -race ./...
它要解决的不是逻辑对错,而是并发安全边界:
- 是否有未同步的共享写入
- 是否有读写竞争
- 某段代码在高并发下是否可能出现偶发错误
最小例子 / 最小场景
如果多个 goroutine 同时修改一个共享变量,而没有锁、channel 或其他同步手段,race detector 往往能在测试或运行阶段提示潜在数据竞争。
为什么这部分重要
并发 bug 很多时候不是“必现错误”,而是偶发、时序相关、难以肉眼审查的隐患。race detector 的价值就在于把一部分这类问题提前暴露出来。
边界与易混淆点
- 没报 race,不代表并发逻辑就一定设计良好
- race detector 更适合排查共享状态问题,不替代取消控制和资源泄漏排查
- 它是运行期检测,前提是相关代码路径真的被执行到