Go性能对比测试需用testing包的Benchmark函数,函数名以Benchmark开头、参数为*testing.B、循环执行b.N次并用b.ResetTimer()排除初始化开销。
在 Go 中进行性能对比测试,核心是使用 testing 包提供的基准测试(Benchmark)功能。它能准确测量函数执行时间、内存分配等指标,帮助你客观比较不同实现方式的性能差异。
基准测试函数必须满足以下要求:
Benchmark 开头,后接大驼峰命名(如 BenchmarkMapLookup)*testing.B
b.N 次(Go 自动调整次数以保证测试时长稳定)b.ResetTimer() 排除准备开销示例:对比切片遍历与 map 查找
func BenchmarkSliceSearch(b *testing.B) {
data := []int{1, 2, 3, ..., 1000}
target := 999
b.ResetTimer()
for i := 0; i < b.N; i++ {
found := false
for _, v := range data {
if v == target {
found = true
break
}
}
// 避免编译器优化掉整个循环
if !found {
b.Fatal("not found")
}
}
}
func BenchmarkMapLookup(b *testing.B) {
data := make(map[int]bool)
for i := 1; i <= 1000; i++ {
data[i] = true
}
target := 999
b.ResetTimer()
for i := 0; i < b.N; i++ {
if !data[target] {
b.Fatal("not found")
}
}
}
使用命令运行基准测试:
go test -bench=^Benchmark.*$ -benchmem -count=3
-bench=^Benchmark.*$:正则匹配所有 Benchmark 函数-benchmem:显示每次操作的内存分配次数和字节数-count=3:重复运行 3 次取平均值,减少抖动影响输出示例:
BenchmarkSliceSearch-8 1000000 1241245 ns/op 0 B/op 0 allocs/op BenchmarkMapLookup-8 20000000 62.3 ns/op 0 B/op 0 allocs/op
关键字段含义:
1000000:本次运行执行了约 100 万次1241245 ns/op:每次操作平均耗时 1241245 纳秒0 B/op:每次操作分配 0 字节内存0 allocs/op:每次操作无堆内存分配(对 GC 压力小)确保对比公平,需注意:
init() 或 func init() 中预生成)blackhole 防止被优化掉(Go 1.21+ 可用 testing.BenchmarkResult 辅助验证)-count 多次运行可缓解手动比对多次运行结果易出错。推荐用官方工具 benchstat 统计分析:
go install golang.org/x/perf/cmd/benchstat@latest
分别保存两组结果
go test -bench=^Benchmark.*$ -benchmem -count=5 > old.txt
修改代码后
go test -bench=^Benchmark.*$ -benchmem -count=5 > new.txt
benchstat old.txt new.txt
输出会标明性能提升/下降百分比及 p 值,判断差异是否具有统计显著性(例如 Δ = -85.27% (p=0.000) 表示新方案快约 6.8 倍且高度可信)。
# go
# golang
# 字节
# 工具
# count
# 局部变量
# 循环
# 堆
# 切片
# map
# 进阶
# 对比测试
# 随机数
# 首次
# 如有
# 遍历
# 执行时间
# 它能
# 时长
# 两组
相关文章:
为什么Go需要go mod文件_Go go mod文件作用说明
建站之星各版本价格是多少?
建站主机系统SEO优化与智能配置核心关键词操作指南
网站规划与制作是什么,电子商务网站系统规划的内容及步骤是什么?
深圳网站制作费用多少钱,读秀,深圳文献港这样的网站很多只提供网上试读,但有些人只要提供试读的文章就能全篇下载,这个是怎么弄的?
如何在阿里云高效完成企业建站全流程?
购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?
制作旅游网站html,怎样注册旅游网站?
如何撰写建站申请书?关键要点有哪些?
南平网站制作公司,2025年南平市事业单位报名时间?
Swift中循环语句中的转移语句 break 和 continue
广州网站建站公司选择指南:建站流程与SEO优化关键词解析
Android使用GridView实现日历的简单功能
如何用AWS免费套餐快速搭建高效网站?
宝塔新建站点为何无法访问?如何排查?
临沂网站制作公司有哪些,临沂第四中学官网?
佛山企业网站制作公司有哪些,沟通100网上服务官网?
相册网站制作软件,图片上的网址怎么复制?
如何在IIS中新建站点并配置端口与物理路径?
Thinkphp 中 distinct 的用法解析
矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?
宝塔Windows建站如何避免显示默认IIS页面?
平台云上自助建站如何快速打造专业网站?
如何在阿里云服务器自主搭建网站?
齐河建站公司:营销型网站建设与SEO优化双核驱动策略
网站建设制作需要多少钱费用,自己做一个网站要多少钱,模板一般多少钱?
济南网站制作的价格,历城一职专官方网站?
建站之星后台密码遗忘或太弱?如何重置与强化?
如何配置IIS站点权限与局域网访问?
定制建站流程解析:需求评估与SEO优化功能开发指南
如何获取开源自助建站系统免费下载链接?
如何用好域名打造高点击率的自主建站?
已有域名和空间如何快速搭建网站?
如何解决ASP生成WAP建站中文乱码问题?
香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化
c# 服务器GC和工作站GC的区别和设置
css网站制作参考文献有哪些,易聊怎么注册?
武汉外贸网站制作公司,现在武汉外贸前景怎么样啊?
如何在阿里云通过域名搭建网站?
常州自助建站:操作简便模板丰富,企业个人快速搭建网站
建站主机服务器选型指南与性能优化方案解析
企业网站制作公司网页,推荐几家专业的天津网站制作公司?
建站之星logo尺寸如何设置最合适?
高端建站如何打造兼具美学与转化的品牌官网?
车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?
个人摄影网站制作流程,摄影爱好者都去什么网站?
家庭建站与云服务器建站,如何选择更优?
手机网站制作与建设方案,手机网站如何建设?
北京专业网站制作设计师招聘,北京白云观官方网站?
魔毅自助建站系统:模板定制与SEO优化一键生成指南
*请认真填写需求信息,我们会在24小时内与您取得联系。