go语言切片之cap函数用法

对于一个切片,可以看作由一个左指针和一个右指针以及capacity组合而成

array = []int{1,2,3,4,5,6,7,8,9}

// 从array取,左指针索引为0,右指针为5,切片是从array切的,
// 而且cap函数只计算左指针到原array最后的值的个数
slice = array[0:5]  // slice ==> {1, 2, 3, 4, 5}
cap(slice) // == 9,因为左指针索引为0,到结尾有9个数,cap为9

slice = slice[2:] // slice ==> {3, 4, 5}
cap(slice) // == 7 左指针偏移了2步,所以cap为9-2=7

  补充:array = []int{1,2,3,4,5,6,7,8,9}是关于切片的初始化Orz;len(slice)可以看成slice的长度,而cap(slice)可以看成数组的长度;取切片:生成subarray的过程,slice只是对于此数组的一个抽象;取切片赋值:标签从“源数组”重定向至subarray;也即两次取切片赋值都相当于各自分配了新的subarray,被赋值的slice指向了新生成的subarray。第一次操作生成的子数组subarray1长度没变,第二次操作(基于subarray1)生成的子数组subarray2长度变化,仅此而已~所以会出现cap() 前后打印结果的变化。Go中的Slice和Python中的 List差别蛮大的,不是一个东西,如果大家像我一样一直在做python方向的研发,对这一块儿的理解可能会有一点固化思维,要尤为注意,如果有更好的解释和理解,希望大家多多交流,帮助我更好的学习Go语言。

posted @ 2022-11-21 15:07  方方的鱼  阅读(271)  评论(0编辑  收藏  举报