go切片窥探
切片(slice)是对数组一个连续片段的引用(该数组我们称之为相关数组,通常是匿名的),所以切片是一个引用类型(因此更类似于C/C++中的数组类型,或者Python中的list类型)。这个片段可以是整个数组,或者是由起始和终止索引标识的一些项的子集。需要注意的是,终止索引标识的项不包括在切片内。切片提供了一个相关数组的动态窗口。
切片是可索引的,并且可以由 len()
函数获取长度。
给定项的切片索引可能比相关数组的相同元素的索引小。和数组不同的是,切片的长度可以在运行时修改, 最小为 0 最大为相关数组的长度: 切片是一个 长度可变的数组。
切片提供了计算容量的函数cap()
,可以测量切片最长可以达到多少
它等于切片的长度 + 数组除切片之外的长度
如果 s 是一个切片, cap(s) 就是从 s[0] 到数组末尾的数组长度。
切片的长度永远不会超过它的容量, 所以对于 切片 s 来说该不等式永远成立:
0 <= len(s) <= cap(s)
多个切片如果表示同一个数组的片段,它们可以共享数据;因此一个切片和相关数组的其他切片是共享存储的, 相反,不同的数组总是代表不同的存储。 数组实际上是切片的构建块。
因为切片是引用, 所以它们不需要使用额外的内存并且比使用数组更有效率, 所以在 Go 代码中 切片比数组更常用。