
go 中的示例函数(examplexxx)必须包含 `// output:` 注释,否则虽能编译但不会被执行;添加匹配的输出注释后,`go test` 才会识别并运行该示例。
在 Go 中,example_test.go 文件用于编写可执行文档示例(Examples),它们不仅展示用法,还能被 go test 自动验证——但前提是满足特定格式要求。
关键规则如下:
- 示例函数名必须以 Example 开头(如 Example、ExamplePoke),且位于 _test.go 文件中;
- 函数必须属于被测包的对应测试包(即 package xxx_test),且导入主包时需确保路径正确(注意:gist.github.com/... 不是合法的 Go 模块导入路径,本地开发应使用模块化结构);
- 最易忽略的一点:函数末尾必须包含 // Output: 注释行,其后紧跟函数实际标准输出(不含前导空格或换行),且输出内容必须与运行结果严格一致(包括空格、换行符)。
✅ 正确写法示例:
package cow_test
import (
"fmt"
cow "your-module-path/cow" // 替换为真实模块路径,如 ./ 或 github.com/you/repo/cow
)
func Example() {
cow.Poke()
// Output: MOOOO!
}⚠️ 注意事项:
- go test -v example_test.go 仅测试单个文件,但要求当前目录是模块根目录(含 go.mod),且包导入路径可解析;
- 若使用 gist.github.com/... 这类 URL 作为导入路径,Go 无法定位源码——应改用本地相对路径(如 ".")或配置合法 module path;
- 输出注释中的内容是预期输出,若 cow.Poke() 实际打印 MOOOO!\n(带换行),则注释必须写 // Output: MOOOO!(Go 会自动忽略末尾换行);若函数无输出,可写 // Output:(空输出);
- 运行全部示例:go test -v -run ^Example;
- 查看示例文档:go doc -examples。
总结:Go 示例不是普通测试函数,而是“可验证的文档”。添加 // Output: 是启用执行的开关,缺失它,go test 就会静默跳过——这也是你看到 no tests to run 的根本原因。










