Go语言基准测试需使用Benchmark前缀和testing.B类型,通过b.N自动调节循环次数以获取稳定性能数据,测试函数放入_test.go文件中,运行go test -bench=.可得每操作耗时及内存使用,关键在于只测量目标代码并确保足够执行次数。

在Go语言中写基准测试非常直接,核心是使用
Benchmark
前缀和
b.N
来控制循环次数。基准测试的目的是测量代码的性能,比如函数执行所需的时间或内存分配情况。
使用Benchmark前缀定义测试函数
基准测试函数必须放在以
_test.go
结尾的文件中,函数名以
Benchmark
开头,参数类型为
*testing.B
。
例如,测试一个计算斐波那契数的函数:
func BenchmarkFibonacci(b *testing.B) {
for i := 0; i fibonacci(10)
}
}
BenchmarkFibonacci会自动被
go test
识别。测试运行时,Go会不断调整
b.N
的值(比如1000、10000、100000),直到获得足够稳定的性能数据。
立即学习“go语言免费学习笔记(深入)”;
b.N的作用:自动调节循环次数
b.N
是Go运行时决定的循环次数,目的是让测试运行足够长的时间以获得准确的性能指标。你不需要手动设置它,只需把要测试的代码放在
for
循环中执行
b.N
次。
常见写法:
将被测函数调用放入
for i := 0; i < b.N; i++
中 避免在循环内做无关操作,以免影响测量精度 如果函数依赖初始化数据,可将初始化放在循环外
示例:测试字符串拼接性能
比较两种字符串拼接方式的性能:
func BenchmarkStringConcat(b *testing.B) {
s := “hello”
for i := 0; i _ = s + “world”
}
}
func BenchmarkStringBuilder(b *testing.B) {
var sb strings.Builder
for i := 0; i sb.Reset()
sb.WriteString(“hello”)
sb.WriteString(“world”)
_
}
}
运行基准测试:
go test -bench=.
输出类似:
BenchmarkStringConcat-8 10000000 120 ns/op
BenchmarkStringBuilder-8 20000000 60 ns/op
表示每次操作平均耗时,单位是纳秒。
额外提示
用
-bench=函数名
运行特定测试,如
go test -bench=BenchmarkFibonacci
加
-benchmem
可查看内存分配情况 避免在循环中进行变量定义或初始化,除非这是你要测试的一部分 确保被测逻辑足够“热”,即执行次数足够多,才能反映真实性能
基本上就这些。写好基准测试的关键是保持测试逻辑干净,只测你想测的部分,让
b.N
自动帮你跑足够多次。Go的基准测试机制简单但有效,配合
go test -bench
就能快速对比性能差异。
以上就是Golang基准测试怎么写 使用Benchmark前缀与b.N循环的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1400906.html
微信扫一扫
支付宝扫一扫