切片的结构
切片是一个结构体
type slice struct {
array unsafe.Pointer //指向底层数组
len int
cap int
}
占用内存大小: 在64bit系统上占24个字节.
//word大小
32bit: 1word=4byte
64bit: 1word=8byte
//在64bit系统上slice占24个字节
type slice struct {
array unsafe.Pointer //8byte
len int //8byte
cap int //8byte
}
fmt.Println(unsafe.Sizeof([]int{})) //24
定义
// 直接声明定义
var a[]int //nil切片: 切片指向nil
b:= []int{} //空切片,有内存地址分配
println(a==nil,b==nil) //只能和nil比较, slice引用类型之间不支持==运算
b:= []int{1,2,5:10}
// make创建,分配内存空间
arr:=make([]int,3) //cap==len,必须要指定size
arr := make([]int, 3, 4)
fmt.Printf("%#v",arr) //[]int{0, 0, 0}
// 从数组/切片获取
arr = [i,j,k]
len = j-i
cap = k-i
// 一个例子
x:= [...]int{0,1,2,3,4,5,6,7,8,9}
操作 得到的切片 len cap 备注
-------------+--------------------------+----+------+------------------------------
x[:] [0 1 2 3 4 5 6 7 8 9] 10 10 x[0:len(x)]
x[2:5] [2 3 4] 3 8
x[2:5:7] [2 3 4] 3 5
x[4:] [4 5 6 7 8 9] 6 6 x[4:len(x)]
x[:4] [0 1 2 3] 4 10 x[0:4]
x[:4:6] [0 1 2 3] 4 6 x[0:4:6]