中文描述约定
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 函数加上第三个参数。