Hello world
知识点概括
- 一些Go语法
- 如何编写测试tests
- 声明包含参数列表和返回值类型的函数
if
、const
和switch
- 声明变量variables和常量constants
- TDD(Test Driven Development)设计模式
- 编写一个注定fail的测试,并观察它是如何fail的。从而确保我们编写的测试与任务相关,并且该测试能够提供简单易懂的failure描述
- 用最少量的代码让测试pass,确保程序可运行
- 基于test的安全性进行重构,优化使得代码更加鲁棒、可读、人性化。。。
编写tests的规则
- It needs to be in a file with a name like
xxx_test.go
- The test function must start with the word
Test
- The test function takes one argument only
t *testing.T
- In order to use the
*testing.T
type, you need toimport "testing"
类型为 *testing.T
的变量 t
是你伸到测试框架中的 hook,所以当你想让测试失败时可以执行 t.Fail()
之类的操作。我们调用 t
的 Errorf
方法打印一条消息并使测试fail。f
表示格式化,它允许我们构建一个字符串,并将值插入占位符值 %q
中。当你的测试失败时,它能够让你清楚是什么错误导致的。
扩展知识:占位符
对一个事情建立不同场景的子测试subtests,这种方法的好处是,你可以建立在其他测试中也能够使用的共享代码。通常不同的子测试里需要使用相同的断言assertion。可以通过重构将断言提取为function,这样可以减少重复并且增强代码可读性。
func assertCorrectMessage(t testing.TB, got, want string) {
t.Helper()
if got != want {
t.Errorf("got %q want %q", got, want)
}
}
helper function需要传入一个t *testing.T
参数从而在必要的时候让测试代码fail。更加推荐使用t testing.TB
,这是一个t *testing.T
和t *testing.B
都满足的interface。我们需要使用t.Helper()
告诉测试套件这个方法是一个helper,这样可以避免fail行号提示出现在helper方法中。
TDD准则
- 编写test
- 使得编译通过
- 运行测试,看到测试fail并且确保输出的error message有意义
- 编写足够的代码使得测试pass
- 重构
关于返回值
//函数名称以小写字母开头。在 Go 中,公共函数以大写字母开始,私有函数以小写字母开头。我们不希望我们算法的内部结构暴露给外部,所以我们将这个功能私有化。
func greetingPrefix(language string) (prefix string) {
switch language {
case french:
prefix = frenchHelloPrefix
case spanish:
prefix = spanishHelloPrefix
default://如果没有其他case语句匹配,将会执行default分支。
prefix = englishHelloPrefix
}
return
}
-
在我们的函数签名中,我们使用了 ==命名返回值==named return value(
prefix string
)。一般只有在从上下文无法清楚知道返回值具体含义的时候采用命名返回值。 -
这将在你的函数中创建一个名为
prefix
的变量。-
它将被分配「零」值。这取决于类型,例如
int
是 0,对于字符串它是""
。 -
你只需调用
return
而不是return prefix
即可返回所设置的值。(只针对命名返回值) -
这将显示在 Go Doc 中,所以它使你的代码更加清晰。
-