中文描述约定
array: 数组
slice: 切片

来做个测试,不在机器上运行下面的代码,请给出输出

vals :make([]int, 5)
for i:= 0; i < 5; i++ {
    vals = append(vals, i)
}
fmt.Println(vals)
[0 0 0 0 0 1 2 3 4][0 1 2 3 4]

Slices VS Arrays

val a [10]intlen(a)val b [11]int
var vals [20]int
for i := 0; i < 5; i++ {
    vals[i] = i * i
}
subsetLen := 5

fmt.Println("The subset of our array has a length of:" subsetLen)

// Add a new item to our array
vals[subsetLen] = 123
subsetLen++
fmt.Print("The subset of our array has a length of:", subsetLen)
append

回到我们的测试题

makemake([]int, 5)append[0 0 0 0 0]
vals := make([]int, 5)  
fmt.Println("Capacity was:", cap(vals))  
for i := 0; i < 5; i++ {
    vals = append(vals, i)
    fmt.Println("Capacity is now:", cap(vals))
}
fmt.Println(vals)
// output: [0 0 0 0 0 0 1 2 3 4]
[0, 1, 2, 3, 4]
vals := make([]int, 5)  
for i := 0; i < 5; i++ {  
      vals[i] = i
}
fmt.Println(vals)

代码不够简洁,改造一下:我们把 vals 的长度设置为 0 ,容纳上限为 5

vals := make([]int, 0, 5)
for i := 0; i < 5; i++ {
    vals = appen(vals, i)
}
fmt.Println(vals)

最后,如果能知道切片的上限,建议最好给 make 函数加上第三个参数。