Go切片详细讲解长度和容量

tech2024-11-19  5

//切片的声明方式 //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% 的容量,直到新容量大于期望容量;

 

最新回复(0)