a:=make([]int, 2)
a=append(a, 3,4,5)
在1.18版本之前:
优先判断当前cap是否大于1024,不大于翻倍当前的cap,大于1024,则增加 old_cap+1024/4
1.18版本之后:
优先判断当前cap是否大于256,不大于翻倍cap,当达到512时变成 old_cap+(old_cap+3*256)/4
然后做了个内存对齐,因此一般会大于等于上面的计算公式
另外需要注意的是:
在没有扩容slice之前,进行append操作或者赋值操作,原始变量的对应也会改变,参考如下例子
package main
import (
"fmt"
)
func main() {
a := []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
b := a[2:5]
c := a[2:6:7]
fmt.Println(c)
b = append(b, 100)
c = append(c, 100)
c = append(c, 200)
b[1] = 100
fmt.Println(b)
fmt.Println(c)
fmt.Println(a)
}