切片知识点:
1.理解切片的长度len
2.理解切片的容量cap
package main
import "fmt"
func main() {
s := make([]int,10)
//s := []int{2000}
printSlice(s)
//var a []int
for i := 1; i < 30; i++ {
s = append(s, 100+i)
printSlice(s)
}
s1:= []int{1,2,3,4,5,6}
s1 = s1[:3]
s1[2] = 33
//此时s1的长度len为3,并且33覆盖3
printSlice(s1)
//由于s1的长度len为3,容量为6,append 44,没有超过容量,所以覆盖4
s1 = append(s1,44)
printSlice(s1)
//扩大s1的长度len为6;注意:不能超过容量
//此时s1的长度len为6,容量保持不变
s1 = s1[:6]
printSlice(s1)
//由于s1的长度为6,容量也为6,调用append函数会扩大容量
//扩大容量规则:1.原来容量小于1024,则扩大到原来容量的2倍;2.原容量大于或等于1024,则扩大到原来容量的1.25倍
//所以此时s1的长度len为7;容量变为12
s1 = append(s1,77)
printSlice(s1)
//由于s1的长度len为7,容量为12,再append 88 不会超过容量
//所以len为8,容量保持不变
s1 = append(s1,88)
printSlice(s1)
}
func printSlice(s []int) {
fmt.Printf("len=%d cap=%d %v\n", len(s), cap(s), s)
}
https://blog.youkuaiyun.com/u013474436/article/details/88770501