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.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值