查看slice内部的构造:在runtime/slice.go中查看源码
1 | // runtime/slice.go |
结构剖析,slice 共有三个属性:
对切片进行赋值的时候,实际是对表层结构体的拷贝,但是拷贝出来的结构体与原来的结构体的array指向同一个底层数组。
平常我们创建切片的方式有很多种,其实里面就包含了我们切片中的三种状态(零切片,nil切片,空切片),只是很少有人关注罢了
创建方式一 | 创建方式二 | 特点 | |
---|---|---|---|
zero slice | 【任意数据类型都可以】s1 := make([]int, 10) |
【指针类型】s2 := make([]*int, 10) |
数组中的元素值都是对应类型的零值 |
nil slice | var s1 []int |
s1 := *new([]int) |
底层数组是nil |
empty slice | s1 := make([]int, 0) |
s1 := []int{} |
底层数组都指向某一个特殊的内存地址(zerobase) |