Go语言之slices初认识(一)

 由于go语言中的数组是一个固定的长度的聚合类型,也无法灵活地改变数组中的值。因此,go语言又引入的另一种聚合类型:slices类型。

slices类型一种灵活又强大地“数组”,为什么GO语言要一下子引入两种容易让人混乱的概念呢?这是我在学习中的一点困惑。
slices到底是什么呢?是一种由三部分(指针、长度和容量 )构成的一种轻量级的数据结构,提供了访问数组子序列(或者全部)元素的功能。
本质上,多个不同slices可能共享同一个数组的底层数据。slice并不是一个纯粹的引用类型,它实际上是一个类似下面结构体的聚合类型:
type IntSlice struct {
ptr *int
len, cap int
}
数组可以进行相等比较,而slices则不能进行相等比较。不过标准库提供了高度优化的bytes.Equal函数来判断两个字节型slice是否相等([]byte),但是对于其他类型的slice,我们必须自己展开每个元素进行比较。
如果你需要测试一个slice是否是空的,使用len(s) == 0来判断,而不应该用s == nil来判断。除了和nil相等比较外,一个nil值的slice的行为和其它任意0产长度的slice一样。
因此,可以这样理解,slices是数组的view.

猜你喜欢

转载自blog.csdn.net/downer328/article/details/78045070
今日推荐