在*_test.go文件中,有三种类型的函数:测试函数、基准测试函数、示例函数。
- 测试函数是以
Test*
为函数名前缀的函数,用于测试程序的一些逻辑行为是否正确;go test命令会调用这些测试函数并报告测试结果是PASS或FAIL。- 每个测试函数必须导入testing包
func TestName(t *testing.T) { // ... }
- 每个测试函数必须导入testing包
- 基准测试函数是以
Benchmark*
为函数名前缀的函数,它们用于衡量一些函数的性能;go test命令会多次运行基准函数以计算一个平均的执行时间。 - 示例函数是以
Example*
为函数名前缀的函数,提供一个由编译器保证正确性的示例文档。
示例函数有三个用处:func ExampleIsPalindrome() { fmt.Println(IsPalindrome("A man, a plan, a canal: Panama")) fmt.Println(IsPalindrome("palindrome")) // Output: // true // false }
- 最主要的一个是作为文档:一个包的例子可以更简洁直观的方式来演示函数的用法,比文字描述更直接易懂,特别是作为一个提醒或快速参考时。一个示例函数也可以方便展示属于同一个接口的几种类型或函数直接的关系,所有的文档都必须关联到一个地方,就像一个类型或函数声明都统一到包一样。同时,示例函数和注释并不一样,示例函数是完整真实的Go代码,需要接受编译器的编译时检查,这样可以保证示例代码不会腐烂成不能使用的旧代码。
根据示例函数的后缀名部分,godoc的web文档会将一个示例函数关联到某个具体函数或包本身,因此ExampleIsPalindrome示例函数将是IsPalindrome函数文档的一部分,Example示例函数将是包文档的一部分。 - 在go test执行测试的时候也运行示例函数测试。如果示例函数内含有类似上面例子中的
// Output:
格式的注释,那么测试工具会执行这个示例函数,然后检测这个示例函数的标准输出和注释是否匹配。 - 示例函数的第三个目的提供一个真实的演练场。 http://golang.org 就是由godoc提供的文档服务,它使用了Go Playground提高的技术让用户可以在浏览器中在线编辑和运行每个示例函数,就像图11.4所示的那样。这通常是学习函数使用或Go语言特性最快捷的方式。
有疑问加站长微信联系(非本文作者)