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
# 进阶
# 对比测试
# 随机数
# 首次
# 如有
# 遍历
# 执行时间
# 它能
# 时长
# 两组
相关文章:
智能起名网站制作软件有哪些,制作logo的软件?
如何通过商城自助建站源码实现零基础高效建站?
如何在Golang中使用replace替换模块_指定本地或远程路径
专业网站建设制作报价,网页设计制作要考什么证?
建站主机功能解析:服务器选择与快速搭建指南
网站制作公司排行榜,抖音怎样做个人官方网站
如何快速登录WAP自助建站平台?
如何在Mac上搭建Golang开发环境_使用Homebrew安装和管理Go版本
齐河建站公司:营销型网站建设与SEO优化双核驱动策略
网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?
如何做网站制作流程,*游戏网站怎么搭建?
如何快速生成可下载的建站源码工具?
韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南
如何自定义建站之星模板颜色并下载新样式?
设计网站制作公司有哪些,制作网页教程?
制作门户网站的参考文献在哪,小说网站怎么建立?
建站之星如何实现五合一智能建站与营销推广?
建站主机CVM配置优化、SEO策略与性能提升指南
免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?
建站ABC备案流程中有哪些关键注意事项?
网站图片在线制作软件,怎么在图片上做链接?
c++23 std::expected怎么用 c++优雅处理函数错误返回【详解】
,网页ppt怎么弄成自己的ppt?
如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?
专业网站制作服务公司,有哪些网站可以免费发布招聘信息?
极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?
建站之星如何实现PC+手机+微信网站五合一建站?
小说建站VPS选用指南:性能对比、配置优化与建站方案解析
seo网站制作优化,网站SEO优化步骤有哪些?
建站之星安装路径如何正确选择及配置?
香港服务器部署网站为何提示未备案?
详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)
Android使用GridView实现日历的简单功能
php条件判断怎么写_ifelse和switchcase的使用区别【对比】
建站主机默认首页配置指南:核心功能与访问路径优化
建站之星体验版:智能建站系统+响应式设计,多端适配快速建站
建站之星图片链接生成指南:自助建站与智能设计教程
c++怎么编写动态链接库dll_c++ __declspec(dllexport)导出与调用【方法】
专业公司网站制作公司,用什么语言做企业网站比较好?
学校建站服务器如何选型才能满足性能需求?
如何基于云服务器快速搭建个人网站?
如何做静态网页,sublimetext3.0制作静态网页?
网站制作壁纸教程视频,电脑壁纸网站?
建站主机选购指南:核心配置与性价比推荐解析
宝塔面板创建网站无法访问?如何快速排查修复?
Swift中switch语句区间和元组模式匹配
如何在IIS中新建站点并配置端口与物理路径?
零基础网站服务器架设实战:轻量应用与域名解析配置指南
制作销售网站教学视频,销售网站有哪些?
教学论文网站制作软件有哪些,写论文用什么软件
?
*请认真填写需求信息,我们会在24小时内与您取得联系。