Go微服务实战
上QQ阅读APP看书,第一时间看更新

6.3.3 示例函数

在godoc生成的文档中有一些示例对函数的描述非常形象,这些示例以使用方法以及输出描述为主,比如Copy函数会以如图6-2所示的方式描述。

图6-2 godoc生成的文档

这是一种交互式的说明文档,其使用更为形象直观。其实这种文档的底层实现就是本节要介绍的示例函数Example。

Example函数也是通过 go test工具来运行的,它的使用一般有三个目的:

▪第一个目的就是文档的作用,相当于在说明函数的时候举了一个形象的例子。与文档不同,Example是需要编译的,所以保证了与代码的同步性和可用性。

▪第二个目的就是在执行go test命令时,进行可运行测试。Example函数中如果有 // output:注释,那么go test执行时就会把输出的结果与注释处的结果进行匹配。

▪第三个目的是交互性测试代码,比如图6-2结合了Go Playground,让用户可在浏览器中编辑和运行示例函数。图6-2中的内容,可以访问以下网址来查看:https://golang.org/pkg/io/#example_Copy。

在使用Example函数时,也要求示例函数写在以_test.go结尾的文件中。Example函数的命名规则要求必须以Example开始,并且函数没有任何参数。

来看一个简单的示例,先写一个求和的函数:


book/ch06/6.3/example/testExam.go
1. package exam
2.
3. func Sum(a,b int) int {
4.     return a+b
5. }

接下来写一个示例函数:


1. package exam
2.
3. import (
4.     "fmt"
5.     _ "testing"
6. )
7.
8. func ExampleSum() {
9.     fmt.Println(Sum(1,2))
10.     // Output:
11.     // 3
12. }

可以使用go test命令来检查函数的执行结果是否符合预期:


$ go test testExam.go exam_test.go -v
=== RUN   ExampleSum
--- PASS: ExampleSum (0.00s)
PASS
ok      command-line-arguments  0.005s

可以看到,结果是PASS。这就是示例函数的写法,此处仅仅是一个简单的例子。在一些大型项目上,往往还需要通过第三方工具来生成方便的API文档,这种情况下Example函数的用法会更多。