Golang基准测试怎么写 使用Benchmark前缀与b.N循环

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

golang基准测试怎么写 使用benchmark前缀与b.n循环

在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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月15日 17:23:34
下一篇 2025年12月15日 17:23:45

相关推荐

发表回复

登录后才能评论
关注微信