
Go 的示例函数(ExampleXXX)需与普通测试函数共存于 *_test.go 文件中,仅含 Example 函数而无任何 TestXXX 函数时,go test 会因未发现可执行测试而报“no tests to run”警告。
go 的示例函数(examplexxx)需与普通测试函数共存于 *_test.go 文件中,仅含 example 函数而无任何 testxxx 函数时,`go test` 会因未发现可执行测试而报“no tests to run”警告。
在 Go 中,Example 函数用于文档化和验证函数行为,其输出会被 go test 自动比对 // Output: ... 注释内容。但一个关键前提是:go test 默认只运行以 Test 开头的测试函数;若文件中完全不存在任何 TestXXX 函数,即使包含合法的 ExampleXXX,整个文件也会被跳过,导致 testing: warning: no tests to run 警告。
这不是 bug,而是 Go 测试机制的设计逻辑——Example 函数属于“文档测试”的补充形式,其执行依赖于测试框架被激活,而激活的触发条件正是至少存在一个 TestXXX 函数。
✅ 正确做法:
确保你的 xxx_test.go 文件中至少定义一个空的或实际的测试函数,例如:
func TestStub(t *testing.T) {
// 占位测试,仅用于激活测试框架
}
或更合理的写法(推荐):
func TestMethod1(t *testing.T) {
// 实际功能测试(可选)
}
func ExampleMethod1() {
fmt.Printf("result: %x", Method1())
// Output: xxxx
}
⚠️ 注意事项:
-
Example函数必须导出(首字母大写),且命名严格遵循Example[Type|FunctionName]格式; -
// Output:注释必须紧接在函数体末尾,且前后无空行; - 运行示例需显式启用:
go test -v(显示详细输出)或go test -run=Example(仅运行示例); - 若仅想验证示例而不写测试函数,可临时添加一个最小化
TestXXX(如TestNoop),但生产代码中建议搭配真实单元测试使用。
总结:Go 不允许“纯示例文件”。只要确保 _test.go 文件中存在至少一个 TestXXX 函数,Example 就能被正常识别、执行并校验输出。










