Go benchmark
Go benchmark 通过 testing 包中的 Benchmark 约定来测量代码路径的执行成本,是性能优化前建立基线的第一步。
#type / concept
#status / growing
#tech / dev
#resource / go
[!info] related notes
- 所属 MOC: Go 测试与质量 MOC, Go 性能与诊断 MOC
- 前置概念: Go 测试
- 并列概念: Go pprof
Go benchmark
一句话定义
Go benchmark 是利用 testing 包中的基准测试约定来测量某段代码在重复执行下的成本表现。
核心机制 / 工作原理
Go 中 benchmark 的基本入口通常是:
func BenchmarkXxx(b *testing.B)
再通过:
go test -bench=.
来运行。
它的核心价值是:
- 给优化前建立基线
- 让不同实现方案可比较
- 避免“感觉更快”的主观判断
最小例子 / 最小场景
func BenchmarkAdd(b *testing.B) {
for i := 0; i < b.N; i++ {
Add(1, 2)
}
}
这里最重要的不是循环语法,而是:
- 把待测路径隔离出来
- 让测量过程可重复
边界与易混淆点
- benchmark 测到的是特定输入和特定场景,不是系统整体性能结论
- 没有稳定基线时,过早优化容易跑偏
- benchmark 和 profiling 常常是串联关系:先测出问题,再用 pprof 看热点