gopl-zh.github.com/ch11/ch11-06.md
2016-04-26 20:52:50 +08:00

2.1 KiB
Raw Blame History

11.6. 示例函数

第三种go test特别处理的函数是示例函数以Example为函数名开头。示例函数没有函数参数和返回值。下面是IsPalindrome函数对应的示例函数

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语言特性最快捷的方式。

本书最后的两章是讨论reflect和unsafe包一般的Go用户很少直接使用它们。因此如果你还没有写过任何真实的Go程序的话现在可以忽略剩余部分而直接编码了。