Go语言核心——slice切片

本文详细介绍了Go语言中的slice,它是一个长度可变的元素序列,与数组密切相关。slice是引用类型,由指针、长度和容量组成,可以共享底层数组并进行切片操作。文中通过示例展示了切片的创建、使用以及如何进行安全的操作,并讨论了slice在函数参数传递中的特性。
摘要由CSDN通过智能技术生成

  Slice是长度可变的元素序列(数组不可变),每个元素都有相同的类型。slice类型写作[]T,其中T代表slice中的元素类型;slice和数组写法很像,只是没有指定长度。

  数组和slice之间的联系非常紧密。slice是非常轻量的数据结构,它是引用类型,指向底层的一个数组,该数组被称之为slice的底层数组,slice可以访问底层数组的某个子序列,也可以访问整个数组。一个slice由三个部分组成:指针、长度、容量,指针指向了slice中第一个元素对应的底层数组元素的地址,因为slice未必是从数组第一个元素开始,因此slice中的第一个元素未必是数组中的第一个元素。长度对应slice中的元素数目,长度是不能超过容量的;容量一般是从slice中第一个元素对应底层数组中的开始位置,到底层数组的结尾的长度。内置函数len和cap分别返回一个slice的长度和容量。

  多个slice可以共享底层的数组,甚至它们引用的底层数组部分可以重叠。图4.1表示了一个数组,它的元素是每个月份的字符串名,还有两个slice,它们重叠引用了底层数组。数组定义:

  months := [...]string{1: "January", /* ... */, 12: "December"}

  这里一月份是months[1],十二月是months[12]。通常来说,数组第一元素索引从0开始,但是月份一般是从1月开始到12月,因此在声明数组时,我们跳过了第0个元素,这里,第0个元素会被默认初始化为""(空字符串)。

  下面介绍切片操作s[i:j],这里0 ≤ i≤ j≤ cap(s),该操作会创建一个新的slice,引用s中从第i个元素到第j-1个元素的字序列

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值