Go 语言入门—06 切片

切片
在 go 语言中,切片是对数组的抽象,数组在声明时指定了长度之后就不可再进行改变,在特定场景下数组就不适用,所以就有了切片类型,切片就是“动态数组”,和数组相比,切片的长度是不固定的,可以在切片后面追加元素,长度自动扩容。
切片定义
定义切片和定义数组很像,区别就是定义一个切片不需要指定长度。
切片还可以使用 make 函数定义。
make 函数有三个参数:
第一个参数为切片类型,可以是
[]int,[]string,[]float32
等。第二个参数为切片初始长度。
第三个为切片容量,该参数为可选参数。
切片初始化
一个切片在初始化之前为空切片(nil),长度为 0,可以在声明切片时直接初始化切片,如下表示声明一个 int 切片,初始化值为{1, 2, 3}
初始化为数组的引用,假设有一个数组 arr,在初始化为数组的引用时,通过开始索引和结束索引控制初始化的切片大小和切片内元素个数。
代码示例:
运行结果:

append 和 copy
append 表示在一个切片的末尾追加元素。
copy 表示复制一个切片里面的元素到另一个切片。
代码示例:
运行结果:

切片截取
切片截取使用中括号[]
,通过指定需要截取的开始索引和结束索引。
代码示例:
运行结果:

len 和 cap
长度和容量区别:
长度:长度表示切片中实际存储的元素个数
容量:容量表示切片底层使用的数组的大小
当定义一个切片时,如果没有通过 make 方法指定 cap,则底层会申请一个和切片长度一样的数组,这个数组的大小就是 cap,当使用 append 朝切片中追加元素时,如果追加元素后新的 len 小于 cap,则底层数组不会改变,当新的 len 大于 cap 时,底层就会重新申请一个数组,且数组的长度为 cap * 2,然后将之前数组的元素全部复制到新数组中。
代码示例:
运行结果:

版权声明: 本文为 InfoQ 作者【良猿】的原创文章。
原文链接:【http://xie.infoq.cn/article/849699b183f0b48d560e628e6】。文章转载请联系作者。
评论