go test 默认不运行基准测试,需用 -bench 参数;可同时执行单元测试和基准测试,如 go test -run=TestAdd -bench=BenchmarkAdd -benchmem。
go test 同时跑单元测试和基准测试默认情况下 go test 不会执行 Benchmark* 函数,必须显式加 -bench 参数。想“一次命令兼顾两者”,得组合使用 -run 和 -bench,但要注意它们的匹配逻辑互不干扰:
-run 只控制 Test* 的执行(支持正则,如 -run=^TestAdd$)-bench 只控制 Benchmark* 的执行(也支持正则,如 -bench=^BenchmarkAdd$)go test -run=TestAdd -bench=BenchmarkAdd -benchmem
-bench=.,它会运行所有基准测试,不管 -run 是否匹配到测试函数Benchmark 中调用 testing.B 的常见误用基准测试不是把逻辑塞进 b.N 循环就完事——循环体里不能含初始化、I/O、随机数等干扰项,否则结果失真。典型错误包括:
for i := 0; i 内部调用 rand.Intn() 或 time.Now()
b.ReportAllocs() 就断言内存表现b.StopTimer() / b.StartTimer() 位置不对,漏掉关键路径计时正确做法是把预热、准备、清理拆开:
func BenchmarkParseJSON(b *testing.B) {
data := []byte(`{"name":"foo","age":42}`)
var v map[string]interface{}
b.ResetTimer() // 确保只测核心解析
for i := 0; i < b.N; i++ {
json.Unmarshal(data, &v)
}
}
避免重复实现,建议把被测逻辑封装成导出函数或闭包,单元测试和基准测试都调用它。不要在 Test* 里复制 Benchmark* 的循环逻辑。
CalculateSum(nums []int) int
TestCalculateSum(t *testing.T) 调用它并比对结果BenchmarkCalculateSum(b *testing.B) 在循环中调用它b.ReportMetric() 显式标注单位,例如 b.ReportMetric(float64(costMs), "ms/op")
go test -bench=. -benchmem 结果里 B/op 有时为 0B/op 表示每次操作平均分配的字节数,为 0 通常意味着:编译器做了逃逸分析优化,把本该堆分配的对象转为栈分配;或者你压根没触发内存分配(比如纯计算、复用已有变量)。
make([]int, 0, N) 预分配容量,避免扩容导致额外分配[]byte 或反之(string(b) / []byte(s) 都分配)go build -gcflags="-m" your_file.go 查看逃逸分析输出-benchmem 必须和 -bench 一起用才生效,单独用无效真正难的是让性能测试反映真实负载——比如加锁逻辑在单 goroutine 下快如闪电,一上多协程就暴露竞争,这种场景得靠 runtime.GOMAXPROCS 和手动启多个 goroutine 模拟,而不是只依赖默
认的单线程 b.N 循环。
# js
# json
# go
# golang
# 字节
# 栈
# 性能测试
# cos
# 为什么
# String
# for
# 封装
# 字符串
# 结构体
# int
# 循环
# 堆
# 线程
# 闭包
# channel
# 对象
# 单元测试
# 加锁
# 复用
# 的是
# 随机数
# 多个
# 已有
# 用了
# 它会
相关文章:
建站主机选购指南:核心配置优化与品牌推荐方案
如何配置支付宝与微信支付功能?
建站主机核心功能解析:服务器选择与网站搭建流程指南
矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?
网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?
如何通过FTP服务器快速搭建网站?
如何在IIS7上新建站点并设置安全权限?
已有域名如何免费搭建网站?
网站制作模板下载什么软件,ppt模板免费下载网站?
可靠的网站设计制作软件,做网站设计需要什么样的电脑配置?
如何快速辨别茅台真假?关键步骤解析
教育培训网站制作流程,请问edu教育网站的域名怎么申请?
制作营销网站公司,淘特是干什么用的?
制作电商网页,电商供应链怎么做?
c# 在高并发场景下,委托和接口调用的性能对比
内部网站制作流程,如何建立公司内部网站?
建站之星安装失败:服务器环境不兼容?
如何在宝塔面板中创建新站点?
枣阳网站制作,阳新火车站打的到仙岛湖多少钱?
Python如何创建带属性的XML节点
头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?
高端建站三要素:定制模板、企业官网与响应式设计优化
常州企业建站如何选择最佳模板?
美食网站链接制作教程视频,哪个教做美食的网站比较专业点?
大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?
山东网站制作公司有哪些,山东大源集团官网?
如何获取免费开源的自助建站系统源码?
建站主机与虚拟主机有何区别?如何选择最优方案?
如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?
沈阳制作网站公司排名,沈阳装饰协会官方网站?
C#怎么使用委托和事件 C# delegate与event编程方法
南京网站制作费用,南京远驱官方网站?
企业网站制作公司网页,推荐几家专业的天津网站制作公司?
已有域名和空间,如何快速搭建网站?
建站之星价格显示格式升级,你的预算足够吗?
,怎么在广州志愿者网站注册?
国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?
C#怎么创建控制台应用 C# Console App项目创建方法
如何选择域名并搭建高效网站?
宝塔建站教程:一键部署配置流程与SEO优化实战指南
网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?
网站建设设计制作营销公司南阳,如何策划设计和建设网站?
如何用PHP工具快速搭建高效网站?
如何用景安虚拟主机手机版绑定域名建站?
宝塔建站助手安装配置与建站模板使用全流程解析
公司网站制作费用多少,为公司建立一个网站需要哪些费用?
如何在香港服务器上快速搭建免备案网站?
安云自助建站系统如何快速提升SEO排名?
单页制作网站有哪些,朋友给我发了一个单页网站,我应该怎么修改才能把他变成自己的呢,请求高手指点迷津?
南宁网站建设制作定制,南宁网站建设可以定制吗?
*请认真填写需求信息,我们会在24小时内与您取得联系。