
go 中的 example 函数必须包含以 // output: 开头的输出注释,否则虽能编译但不会被执行;缺少该注释是示例无法通过 go test 运行的最常见原因。
在 Go 中,Example 函数是用于文档化和轻量级验证的重要机制,但它遵循严格的约定:仅当函数末尾包含格式正确的 // Output: 注释时,go test 才会实际执行该函数并验证其标准输出是否匹配。若缺失或格式错误(如拼写成 //output:、// Output: 后无换行、或注释位置不在函数末尾),测试将静默跳过——这正是你遇到 testing: warning: no tests to run 的根本原因。
例如,修正你的 example_test.go 如下:
package cow_test
import (
cow "gist.github.com/85469ecc65bb5bb85857"
)
func Example() {
cow.Poke()
// Output: MOOOO!
}注意三点:
- // Output: 必须严格位于函数体最后一行(或紧随空行之后);
- 冒号后需跟一个空格,接着是期望的标准输出内容(不含引号,不带换行符 \n,Go 会自动忽略末尾换行);
- 输出内容必须与 cow.Poke() 实际打印的内容完全一致(包括大小写、空格、标点)。
此外,确保测试命令正确调用:
go test -v # 在包根目录下运行(而非指定单个 .go 文件)
⚠️ 不要使用 go test -v example_test.go —— 这会以 command-line-arguments 模式编译单文件,绕过包级测试发现逻辑,导致 Example 被忽略。正确做法是进入包含 go.mod 或 *.go 源码的包目录后直接执行 go test -v。
最后,可通过 go doc -examples 查看已识别的 Example 是否被正确解析,这是快速验证注释语法的有效方式。










