写点什么

learn go with tests 学习笔记(二) 数组与切片

用户头像
半亩房顶
关注
发布于: 2020 年 08 月 07 日
learn go with tests 学习笔记(二) 数组与切片

知识点

  • 先写测试!


  • Go 有内置的计算测试 覆盖率的工具,它能帮助你发现没有被测试过的区域。我们不需要追求 100% 的测试覆盖率,它只是一个供你获取测试覆盖率的方式。只要你严格遵循 TDD 规范,那你的测试覆盖率就会很接近 100%。


运行:

`go test -cover`
复制代码

你会看到:

PASS
coverage: 100.0% of statements
复制代码


数组

  • 数组初始化:

数组的容量是我们在声明它时指定的固定值。我们可以通过两种方式初始化数组:

[N]type{value1, value2, ..., valueN} e.g. numbers := [5]int{1, 2, 3, 4, 5}

[...]type{value1, value2, ..., valueN} e.g. numbers := [...]int{1, 2, 3, 4, 5}


  • range

range 会迭代数组,每次迭代都会返回数组元素的索引和值。我们选择使用 _ 空白标志符 来忽略索引

func Sum(numbers [5]int) int {    sum := 0    for _, number := range numbers {        sum += number    }    return sum}
复制代码


  • 数组的大小也属于类型的一部分,如果你尝试将 [4]int 作为 [5]int 类型的参数传入函数,是不能通过编译的。因为这个原因,所以数组比较笨重,大多数情况下我们都不会使用它。Go 的切片(slice)类型不会将集合的长度保存在类型中,因此它的尺寸可以是不固定的。


切片

  • 在 Go 中不能对切片使用等号运算符。你可以写一个函数迭代每个元素来检查它们的值。但是一种比较简单的办法是使用 reflect.DeepEqual,它在判断两个变量是否相等时十分有用。

func TestSumAll(t *testing.T) {
got := SumAll([]int{1,2}, []int{0,9}) want := []int{3, 9}
if !reflect.DeepEqual(got, want) { t.Errorf("got %v want %v", got, want) }}
复制代码


  • 这里有一种创建切片的新方式。make 可以在创建切片的时候指定我们需要的长度和容量。

我们可以使用切片的索引访问切片内的元素,使用 = 对切片元素进行赋值。

func SumAll(numbersToSum ...[]int) (sums []int) {    lengthOfNumbers := len(numbersToSum)    sums = make([]int, lengthOfNumbers)
for i, numbers := range numbersToSum { sums[i] = Sum(numbers) }
return}
复制代码


引用




欢迎大家关注我的公众号,一起探讨技术


发布于: 2020 年 08 月 07 日阅读数: 52
用户头像

半亩房顶

关注

人生那么长,能写多少bug? 2018.11.16 加入

我希望,自己永远是自己。我希望,远离bug。

评论

发布
暂无评论
learn go with tests 学习笔记(二) 数组与切片