介绍append的用法前,需要了解slice的基本构造
array:引用类型指向切片开始位置
len:元素数量,读写范围
cap:最大扩张容量,不超过数组限制
slice := data[low:high:max]
len = high-low
cap = max-low
1、向slice尾部添加元素,返回新的slice对象
输出的是slice对象的地址,并非slice中array的地址
对比array地址,用&silce[0]
s := []int{1,2,3}
fmt.Println(&s)
s2 := append(s, 1)
fmt.Println(&s2)
fmt.Println(s, s2)
0xc00008e6a0
0xc00008e6c0
[1 2 3] [1 2 3 1]
2、一旦超出slice.cap限制,重新分配底层数组
data := [...]int{0, 1, 2, 3, 4, 10: 0}
s := data[:2:3]
s = append(s, 100, 200) // ⼀一次 append 两个值,超出 s.cap 限制
fmt.Println(s, data) // 重新分配底层数组,与原数组⽆无关
fmt.Println(&s[0], &data[0]) // ⽐比对底层数组起始指针