来自之前cnblog的博客
源地址:https://www.cnblogs.com/This-is-Y/p/14492860.html
学习网站:https://studygolang.gitbook.io/learn-go-with-tests/go-ji-chu/hello-world#bian-xie-ce-shi
编写测试
编写测试和函数很类似,其中有一些规则
程序需要在一个名为 xxx_test.go
的文件中编写
测试函数的命名必须以单词 Test
开始
- 测试函数只接受一个参数
t *testing.T
现在这些信息足以让我们明白,类型为 *testing.T
的变量 t
是你在测试框架中的 hook(钩子),所以当你想让测试失败时可以执行 t.Fail()
之类的操作。
t.Errorf
我们调用 t
的 Errorf
方法打印一条消息并使测试失败。error后面的f
表示格式化,它允许我们构建一个字符串,并将值插入占位符值 %q
中。当你的测试失败时,它能够让你清楚是什么错误导致的。
介绍了一种叫做TDD的程序设计方法论,即测试驱动开发(Test-Driven development)
去查了一下这个东西:https://juejin.cn/post/6844903925842198536
TDD三原则
- 除非为了通过一个单元测试,否则不允许编写任何产品代码。
- 在一个单元测试中只允许编写刚好能够导致失败的内容。
- 一次只能写通过一项单元测试的产品代码,不能多写。
- You are not allowed to write any production code unless it is to make a failing unit test pass.
- You are not allowed to write any more of a unit test than is sufficient to fail; and compilation failures are failures.
- You are not allowed to write any more production code than is sufficient to pass the one failing unit test.
3.6
for循环
go里面没有while
,do
,until
这几个关键字,
for循环的变体
空白标识符可以接收一个不需要用的参数,最常用的地方就是在 使用range 迭代数组时,每次迭代都会返回数组元素的索引和值。我们选择使用 _ 空白标志符 来忽略索引。
3.7
函数
函数可变参数
** 方法 reflect.DeepEqual**
这个方法在比较两个数组元素是否完全相同时很好用
两个数组完全相同返回true,否则返回false
方法make
一种创建切片的新方式。make 可以在创建切片的时候指定我们需要的长度和容量。
我们可以使用切片的索引访问切片内的元素,使用 = 对切片元素进行赋值。
切片处理
使用语法 slice[low:high] 获取部分切片,比如
就可以获取到从第二个到第五个元素,如果在冒号的一侧没有数字就会一直取到最边缘的元素,比如
就可以获取到从第二个开始到最后的元素
结构体
go定义结构体和c语言一样,在定义方法时有所区别,不过在调用的时候是一样的
接口
https://www.zhihu.com/question/318138275
稍微学习了一下接口的意思,但还是比较模糊。知乎里说到的鸭子模型,只要它能达到我所设置的成为鸭子的条件,那它就是鸭子。
可以看到在两种手机,两种电脑中,乱入了一台假装自己是手机的电脑,当LapTop定义了这样两个方法后,它即实现了手机这个接口,又实现了电脑这个接口。于是出现了下面的情况
但是只得注意的是,computer.call()并不能执行,虽然这里的computer本质是LapTop,而LapTop有call()这个方法,但是因为接口的关系,它在这里只能成为computer(好像有点绕)
用蓝皮书上说的,接口就是一种约定