Golang切片实现原理

Go语言切片实现原理

        假设存在数组:arr  :=  []int{0,1,2,3,4,5}
        使用切片
                arr1  :=  arr[1:4]  //  结果为  {1,  2,  3}
        然后
                arr2  :=  arr1[2:4]  //  4  超过了arr1长度,并不会报错,结果为  {3,  4},  会自动补齐
        另外
                arr3  :=  arr1[3:5]  //  3和5都超过了  arr1的长度,结果为  {4,  5}

实现原理

        切片仅为原数组的一个视图(view),  结构:
        slice:
                ptr:切片指针
                len:切片长度
                cap:  len  +  原数组中剩余长度
        如arr1:  len  =  3,  cap  =  len  +  len([4,5])  =  5
        
        可当在arr1上使用切片时,如  arr1[3:]  不会报错,编译器判断  3  <  cap,  会从原数组中获取需要补齐的数