//切片的声明方式
//1.nil方式
var slice []int;
//2.make方式
var slice_01 = make([]int,3);相当于长度和容量都是3;
或者指定长度和容量var slice_01 = make([]int,3,5);
//3.
var slice_02 = []int{1,2,3};
//4.m<=n
var slice_03 = [m:n];
切片的长度就是len比较简单也是我们明面能够看得到的,容量和长度有些不同;着重讲解
var slice = make([]int,0,5);
slice = append(slice, 1);
slice = append(slice, 2);
slice = append(slice, 3);
fmt.Printf("len = %d and cap = %d",len(slice),cap(slice))
len = 3 and cap = 5 长度没有超过容量,继续使用当前容量即容量没有变化
继续追加
slice = append(slice, 4);
slice = append(slice, 5);
fmt.Printf("len = %d and cap = %d",len(slice),cap(slice))
len = 5 and cap = 5
长度没有超过容量,len=cap了,还是没有超出容量所以继续使用当前容量即容量没有变化
slice = append(slice, 6);
fmt.Printf("len = %d and cap = %d",len(slice),cap(slice))
长度要超出容量了,需要扩容,扩容的容量大小是当前长度*2,即cap = len * 2;
len = 6 and cap = 10
后续继续扩大长度的机制:
如果当前切片的长度小于 1024 就会将容量翻倍;
如果当前切片的长度大于 1024 就会每次增加 25% 的容量,直到新容量大于期望容量;