Go语言示例函数如何书写_Go语言Example测试函数使用方法【解析】
Go语言Example测试函数命名必须严格遵循规则:函数名以Example开头,后接驼峰式标识符,不允许下划线且无参数。函数体内必须顶格书写//Output:注释,程序输出的每一行需逐字符完全匹配该注释文本。测试源文件需与被测代码同包,推荐命名风格如jsonutil_example_test.go。应避免使用map、time等不可控输出类型,因其无序性或时间
先说说Go语言里一个特别容易踩坑的点——Example测试函数。很多人在写测试的时候顺带写一个Example函数,想当文档用,结果写完发现go test根本不执行它,找半天原因,最后发现要么是函数名写错了,要么是少了一行关键的注释。这种问题编译器不会报错,所以更隐蔽,也更让人头疼。
Example函数名写错就彻底失效
Go 不会报错,也不会提示,只是静默跳过——你写的 exampleFoo、Example_foo、ExampleFoo_test 或 ExampleFoo() 带参数,全都不被识别。
必须严格满足:首字母大写 Example + 驼峰标识符(如 ParseInt、HTTPClient),中间不能有下划线,结尾不能带 _ 或 _test。
ExampleParseInt✅exampleParseInt❌(小写开头)Example_ParseInt❌(下划线后接大写也不行)ExampleParseInt(t *testing.T)❌(带参数)
没写 // Output: 就等于没写
函数能编译,但 go test -example=. 或 go test -v 完全不执行它——不是失败,是直接忽略。
// Output: 不是注释,是测试断言标记。它必须:
- 顶格写(前面不能有空格或缩进)
- 紧贴函数体最后一行之后(中间不能有空行)
- 冒号后跟一个空格,再写期望输出
- 输出内容要和
fmt.Println实际打印的**逐字符一致**(含换行、空格、制表符)
比如 fmt.Println("hello") 输出的是 hellon,那么 // Output: 后面就得是 hello(go test 会自动忽略末尾换行),多一个空格或少一个换行都会报 output mismatch。
Example 必须和源码同包,不能放 xxx_test
如果你的包叫 jsonutil,源码是 package jsonutil,那 ExampleMarshal 就必须定义在 package jsonutil 的 _test.go 文件里,而不是 package jsonutil_test。
放在 jsonutil_test 包里,go doc 找不到,go test 也不执行——它只认“同包 + 同文件作用域”的 Example。
- 推荐命名:
jsonutil_example_test.go,开头写package jsonutil - 不要用
go test example_test.go单文件运行,会进command-line-arguments模式,Example 失效;要进包目录,执行go test -v或go test -example=.
输出含 map/slice/time 等不可控值时容易翻车
Go 的 map 迭代顺序随机,time.Now() 每次不同,fmt.Printf("%p", &x) 地址每次变——这些会让 // Output: 断言必然失败。
解决办法不是“关掉验证”,而是让输出可控:
- 用
json.Marshal替代直接打印map或struct - 用固定时间点:
time.Unix(123, 0)而非time.Now() - 避免
log.Println、自定义io.Writer,只用fmt.Println/fmt.Printf - 多行输出?每行单独
fmt.Println,别用n拼接——godoc会把换行转成空格
真正麻烦的从来不是语法,而是你以为“输出看着一样”就万事大吉;go test 比对的是字节流,空格、换行、大小写,一个都不能错。
Postman是一套面向API全生命周期的开发与测试平台,可在Mac上发送和调试多种协议请求,管理集合、环境及认证信息,并完成脚本测试、模拟服务、监控、文档发布和团队协作。它适合开发、测试及运维人员使用,提供个人免费方案。
Docker Desktop 是 Docker 官方为 Mac 提供的容器开发环境,集成 Docker Engine、命令行工具、Compose、Build、Kubernetes 与图形化管理界面。
Android Studio 是 Google 面向安卓应用开发提供的官方集成开发环境,基于 IntelliJ IDEA 构建。它整合智能代码编辑、Gradle 构建、界面预览、设备模拟、性能分析、调试测试及 APK 分析等工具。
PixPix 是面向品牌、卖家和内容团队的在线 AI 图片视频创作平台,提供图视频 Agent、无限画布、图片生成、视频生成、自然语言编辑及商品套图、产品精修和带货视频等电商工具。
Postman 是面向 API 全生命周期的开发与协作平台。Windows 桌面版可用于构建和发送 HTTP、GraphQL、gRPC、WebSocket、MQTT 等请求,并提供环境变量、集合、脚本测试、模拟服务、监控、文档及团队工作区等
Docker Desktop 为 Windows 开发者提供集成式容器环境,内置 Docker Engine、命令行工具、Compose、Build 与 Kubernetes 等组件,可在本机完成镜像构建、容器运行、日志查看和资源管理。













