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

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


 

你可能感兴趣的:(go,go)