为什么使用切片?
- 数组的容量固定,不能自动拓展。
- 值传递。因为数组作为函数参数时,将整个数组值拷贝一份给形参,内存消耗大,效率低。
- 在 Go语言中,我们几乎可以在所有场景中,使用切片替换数组来使用。
切片的本质: 不是一个数组的指针,而是一种数据结构体,用来操作数组内部元素。
切片的使用:
-
切片与数组定义区别:
– 创建数组时,[2] 指定数组长度。
– 创建切片时,[] 为空,或者 […] -
定义,切片名称 [ low : high : max ]
– low:起始下标位置。
– high:结束下标位置。
– max:切片的最大容量。
– 长度 len = high - low
– 容量 cap = max - low -
截取数组,初始化切片时,如没有指定切片最大容量时,则切片容量跟随原数组(切片)。
– s[:high:max] :从 0 开始,到 high 结束(不包含)。
– s[low:] :从 low 开始,到末尾。
– s[:high] :从 0 开始,到 high 结束。容量跟随原先容量。【常用】 -
切片创建
– 自动推导类型创建切片: slice := []int{1,2,3,4}
– slice := make([]int, 长度, 容量)
– slice := make([]int, 长度) ,没有指定容量,容量 = 长度。【常用】 -
切片做函数参数
– 传引用(地址)。 -
append 函数
– append(切片对象, 待追加元素)
– 向切片增加元素时,切片的容量会自动增长。1024 以下时,以两倍方式增长。 -
copy 函数
– copy(目标位置切片, 源切片)
– 拷贝过程中,直接对应位置拷贝。