- 在go语言中,数组的长度不可改变,在某些场景中不适用。便提供了一种灵活的动态数组,即切片。
- 切片的长度是不固定的,可以追加元素,可使容量变大
- 无需设定长度
func main() {//定义切片,和数组很像,不指定长度即为切片var arr1=[4] int{1,2,3,4} //数组var arr=[] int{1,2,3,4,5,6} //切片fmt.Println(arr1,arr)}
1.make()创建切片
func main() {//创建格式:make([]type,len,cap)arr:=make([]int,5,10) //长度为5 容量为10fmt.Println(len(arr),cap(arr))}
2.追加元素与切片扩容
func main() {//元素追加arr:=make([]int,0,6)fmt.Println(len(arr),cap(arr)) //长度为0,容量6arr=append(arr,1,2,3,4,5 ) //追加了5个元素fmt.Println(len(arr),cap(arr)) //长度为5,容量6//切片扩容arr=append(arr,1,2,3,4,5,7,8,9 ) //追加后自动扩容fmt.Println(len(arr),cap(arr)) // 长度为5,容量14//将切片引入至另一个切片fmt.Println(arr)arr1:=[]int{100,200,300} //[1 2 3 4 5 1 2 3 4 5 7 8 9]arr=append(arr,arr1... ) //将arr1中的元素追加到arr中fmt.Println(arr) //[1 2 3 4 5 1 2 3 4 5 7 8 9 100 200 300]}
3.切片遍历
for i := 0; i < len(arr); i++ {fmt.Println(arr[i])}for i, v := range arr {fmt.Println(i,v)}
4.切片底层复制扩容逻辑
func main() {arr :=[]int{1,3,4}arr1 :=make([]int,len(arr),cap(arr)*2)copy(arr1,arr) //将arr元素复制给arr1fmt.Printf("%d,%d,%v\n",len(arr1),cap(arr1),arr)//3,6,[1 3 4]}
5.深拷贝与浅拷贝
深拷贝:拷贝是数据的本身
浅拷贝:拷贝的是数据地址,多个变量同时指向一个地址
