go 中的示例函数(examplexxx)必须包含 `// output:` 注释,否则虽能编译但不会被执行;添加匹配的输出注释后,`go test` 才会识别并运行该示例。
在 Go 中,example_test.go 文件用于编写可执行文档示例(Examples),它们不仅展示用法,还能被 go test 自动验证——但前提是满足特定格式要求。
关键规则如下:
示例函数名必须以 Example 开头(如 Example、ExamplePoke),且位于 _test.go 文件中;
函数必须属于被测包的
对应测试包
(即 package xxx_test),且导入主包时需确保路径正确(注意:gist.
git
hub.com/... 不是合法的 Go 模块导入路径,本地开发应使用模块化结构);
最易忽略的一点
:函数末尾必须包含 // Output: 注释行,其后紧跟函数实际标准输出(不含前导空格或换行),且输出内容必须与运行结果
严格一致
(包括空格、换行符)。
✅ 正确写法示例:
GitHub Copilot
GitHub AI编程工具,实时编程建议
下载
⚠️ 注意事项:
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 的根本原因。
package cow_test
import (
"fmt"
cow "your-module-path/cow" // 替换为真实模块路径,如 ./ 或 github.com/you/repo/cow
)
func Example() {
cow.Poke()
// Output: MOOOO!
}