切片是基于数组实现的,它的底层是数组,可以理解为对底层数组的抽象,其占用 24 个字节,包含数据指针(8字节)、切片的长度(8字节)、切片的容量(8字节)三个字段,数据结构如下:
type slice struct {
array unsafe.Pointer
len int
cap int
}
array
指向底层数组的指针。
len
切片的长度。
cap
切片的容量,满足 cap >= len
。
切片的初始化方式
// 初始化方式1:直接声明
var slice1 []int
// 初始化方式2:使用字面量
slice2 := []int{1, 2, 3, 4}
// 初始化方式3:使用make创建slice
slice3 := make([]int, 3, 5)
// 初始化方式4: 从切片或数组“截取”
slcie4 := arr[1:3]