在goland中可通过_test.go文件编写benchmark函数并运行,获取执行耗时与内存分配数据以对比性能;需导入testing包、正确放置文件、循环内调用被测函数,并使用-benchmem等参数输出完整指标。

在GoLand中快速编写并运行Benchmark函数,获取函数执行耗时与内存分配数据,用于对比不同实现方案的性能基线。
创建基准测试文件
新建一个以 【_test.go】 结尾的文件,例如 utils_test.go,必须与被测代码放在同一包、同一目录下;否则 go test 找不到被测函数,会报 undefined 错误。
文件开头需导入 "testing" 包,且不能遗漏——没有它,BenchmarkXxx 函数无法编译通过。
写一个空的 Benchmark 函数骨架:
func BenchmarkMyFunc(b *testing.B) {
b.ResetTimer()
for i := 0; i // 调用待测函数
}
}
编写可运行的 Benchmark 函数
假设你有一个字符串重复拼接函数:
func Repeat(s string, n int) string {
var buf strings.Builder
for i := 0; i buf.WriteString(s)
}
return buf.String()
}
在 _test.go 中添加对应基准测试:
func BenchmarkRepeatBuilder(b *testing.B) {
for i := 0; i Repeat("hello", 100)
}
}
【注意:不要在循环外调用 Repeat】 —— 否则 b.N 不起作用,所有结果都会是单次执行时间,失去统计意义。
再写一个对比版本,用 strings.Repeat:
func BenchmarkRepeatStd(b *testing.B) {
for i := 0; i strings.Repeat("hello", 100)
}
}
GoLand 2026.1.1 是 2026.1 发布后的首个维护修正版本,适合已经开始体验 2026.1 新功能并希望同步补丁的开发者。它更适合用于入门项目、现有项目迁移测试和 IDE 行为验证。
在 GoLand 中运行基准测试
方法一:点击函数名左侧绿色三角图标 → 选择 “Run BenchmarkRepeatBuilder”
方法二:右键点击函数名 → Run ‘BenchmarkRepeatBuilder’
方法三:终端进入项目根目录 → 执行:go test -bench=BenchmarkRepeat -benchmem -benchtime=1s
【-benchmem 必须加】 —— 不加则不显示内存分配统计(allocs/op 和 bytes/op),无法做完整性能对比。
输出示例:
BenchmarkRepeatBuilder-8 2345678 523 ns/op 240 B/op 3 allocs/op
BenchmarkRepeatStd-8 9876543 112 ns/op 128 B/op 1 allocs/op
对比多个基准测试结果
第一步:分别运行两个基准测试,用 -cpuprofile 和 -memprofile 生成二进制 profile 文件:go test -run=^$ -bench=BenchmarkRepeatBuilder -benchmem -cpuprofile=builder.cpu -memprofile=builder.mem -benchtime=2sgo test -run=^$ -bench=BenchmarkRepeatStd -benchmem -cpuprofile=std.cpu -memprofile=std.mem -benchtime=2s
第二步:用 GoLand 自带的 Profile Analyzer 打开 builder.cpu 和 std.cpu,切换视图对比 CPU 火焰图峰值位置。
第三步:在终端用 go tool pprof -http=:8080 builder.cpu 启动本地可视化服务,浏览器打开 http://localhost:8080 查看详细调用栈差异。
第四步:直接比对原始输出中的 ns/op 和 allocs/op 数值——前者越小越好,后者越少越好;若两者都更优,说明该实现是性能基线更优解。










