Slice
- Slice代表变长的序列,序列中每个元素都有相同的类型。语法和数组很像,只是没有固定长度。
- 引用类型 -> “动态数组”
- 从概念上来说,slice像一个结构体,这个结构体包含了三个元素:一个指针,指向数组中slice指定的开始位置;长度,即slice的长度;最大长度,也就是slice开始位置到数组的最后位置的参数
- 使用len()获取长度,cap()获取容量
- 可以直接创建或者从底层数组获取生成
- 索引不可以超过被slice的切片的容量cap()值
- 和声明array一样,只是少了长度
var fslice []int
。声明两个slice -> var aSlice,bSlice []byte
- 一般使用make()函数来创建切片
make([]T,len,cap),其中cap可以省略,则和len的值相同
make([]int,10,20)
- append() 返回一个新的切片。如果最终长度未亿加到sliice的容量则返回原始slice,如果超过追加到的sliice的容量则重新分配数组并拷贝原始数据
a := []int{1,2,3,4,5}
s1 := a[2:5]
s2 := a[1:3]
fmt.Println(s1,s2)
fmt.Println(a)
fmt.Println(s1)
copy(s1,s2)
s1是母体,s2是被复制的,把s2从s1的头部开始覆盖
s1 := []int{1,2,3}
s := []int{9,8,7}
s2 := append(s1,s...) //...相当于是把切片打散后传入
fmt.Println(s2)