goland中绿色三角形默认只运行testxxx单元测试,benchmarkxxx需手动配置run configuration并指定-bench=.参数才能执行,否则被完全忽略。

GoLand 里直接点绿色三角形运行的 go test 默认只跑单元测试,不包含性能测试(go test -bench)——必须显式启用,否则 BenchmarkXXX 函数会被完全忽略。
如何在 GoLand 中运行单体测试(unit test)
单体测试即常规的 TestXXX 函数,GoLand 支持三种粒度触发:
- 光标放在某个
TestXXX函数内,点击左侧绿色三角形 → 只运行该函数 - 光标放在测试文件任意位置(如
xxx_test.go),点绿色三角形 → 运行该文件中所有TestXXX函数 - 右键点击包名或目录 → Run 'Tests in xxx' with coverage → 运行整个包的测试并附带覆盖率报告
注意:_test.go 文件必须和被测源码在同一个包下(不能是 package xxx_test 除非是外部测试),否则 GoLand 会报 “No tests found”。另外,如果测试函数签名不是 func TestXxx(t *testing.T)(比如漏了 *testing.T 参数或首字母没大写),IDE 也不会识别为可运行测试。
如何在 GoLand 中运行性能测试(benchmark)
GoLand 不默认支持 -bench,需要手动配置运行配置才能执行 BenchmarkXXX:
GoLand 2026.1.1 是 2026.1 发布后的首个维护修正版本,适合已经开始体验 2026.1 新功能并希望同步补丁的开发者。它更适合用于入门项目、现有项目迁移测试和 IDE 行为验证。
- 点击右上角运行配置下拉菜单 → Edit Configurations…
- 左上角 + → 选择 Go Test
- 填写 Package path(如
./pkg/utils) - 在 Pattern 输入框填
-bench=.(点号表示匹配所有 benchmark 函数) - 勾选 Run with coverage 会失效(benchmark 不支持覆盖率),建议取消
- 保存后运行即可,输出类似:
BenchmarkAdd-8 10000000 123 ns/op
常见陷阱:-bench=. 必须带等号,写成 -bench .(空格分隔)会静默失败;如果只跑某个 benchmark,用 -bench=BenchmarkAdd;加 -benchmem 可同时查看内存分配情况。
为什么 go test 命令行能跑 benchmark,GoLand 点三角形却不行
因为 GoLand 的默认绿色三角形绑定的是「无参数的 go test」,它底层调用等价于 go test -timeout 30s ./...,而 -bench 是独立 flag,不加就不会触发。IDE 不会自动识别 BenchmarkXXX 函数并切换模式——它只认 TestXXX。这也是为什么你写了 BenchmarkFoo 却完全看不到绿色三角形出现在函数左边:GoLand 根本不把它当测试入口。
真正容易被忽略的一点是:benchmark 运行时默认会多次迭代(至少 1 次,通常自动扩到 1 秒总耗时),且禁止任何 t.Log 或 fmt.Println,否则直接 panic。所以别在 benchmark 函数里打日志,调试请用 b.ReportAllocs() 或 b.N 控制循环体。










