Slice types

未匹配的标注

切片表示的是一个数组之中连续的一个片段, 并提供了一种访问数组之中片段中元素的方式。一个数组的所有切片都是相同的数据类型,片段里的元素个数表示了这个切片的长度并且它永远不会是负数。一个尚未初始化的切片数值是 nil

SliceType = "[" "]" ElementType .

查询切片s 的长度可以通过内置函数 len;跟数组不同的是切片的长度是可以改变的。而切片也可以通过整形的 0 到 len(s)-1 indices 来获取对应元素的内容。切片里某个元素的下标可能会少于或者等于它底层数组相应元素的下标。

一旦初始化了一个切片,就永远会有一个与之对应的数组负责存储它的元素,因此切片或者其他切片其实是跟底层数组共用存储空间。相反的是不同的数组会占用不同的存储空间。

一个切片对应数组的下标可能会超过这个切片末尾的下标,这个 capacity 就是用于表示这个数组最大的下标范围:它是切片长度跟数组超过切片长度的和; 可以通过 slicing 来创建一个新的切片长度最大可以达到 capacity,通过函数 cap(a) 可以查询切片 a的 capacity 。 

我们可以通过内置函数 make来创建一个类型为T的切片,这个函数会需要输入一个切片类型,切片长度跟切片容量(可选), 而通过函数 make 创建的切片会分配一个新的底层数组以供这个切片引用。

make([]T, length, capacity)

通过上面的函数声明出来的切片跟声明一个数组然后通过 slicing 创建出来的切片是一样的,也就是说下面两种方式是等价的:

make([]int, 50, 100)
new([100]int)[0:50]

跟数组一样,切片也永远是一维的,不过可以通过组合形成多维对象。对于一个二维的数组,数组在构建时其长度就是固定的; 但是对于二维的切片来说,它的长度是可变的,因此内部的切片需要分配初始化。

本文章首发在 LearnKu.com 网站上。

本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://learnku.com/docs/go-specificatio...

译文地址:https://learnku.com/docs/go-specificatio...

上一篇 下一篇
贡献者:3
讨论数量: 0
发起讨论 只看当前版本


暂无话题~