切片的声明
var arr1 []int
var arr2 = []int{1,2,34,45}
var arr3 = []int{1:2,2:4,3:6}
var arr4 = []int{1:2,2:4,5:6}
//make()创建一个切片 make([]T,len,cap)
var arr5 = make([]int,4,8)//[0 0 0 0]
切片的循环遍历
var arr1 = []string{"php","java","nodejs","golang"}
for i:=0;i<len(arr1);i++{
fmt.Println(arr1[i])
}
for idx,v :=range arr1{
fmt.Println(idx,v)
}
// 复制一份新的切片,arr1可以为一个数组
// 将数组转换为切片,左闭右开
copy_arr = arr1[:]
切片的长度和容量
- 使用内置函数len()求长度,cap()求容量
- 长度:切片中元素的个数
- 容量:从第一个元素开始数,到其底层数组元素末尾的个数
s := []int{12,34,64,48,78,11}// 6, 6
fmt.Printf("长度:%d 容量:%d",len(s),cap(s))// 6, 6
a:= s[2:]// len,cap:4,4
b:= s[1:3]//len,cap:2,5
c:= s[:3]// len,cap:3,6
切片的本质
切片的扩容
不能直接使用arr1[1]=1扩容,提示越界
golang给切片扩容采用append()方法,arr1=append(arr1,19)
append还可以合并两个切片
arr1 = append(arr1,arr2...)
切片是引用传递
arr1 := []int{1,2,3,45}
arr2 := arr1//此时修改arr2就会引起arr1的改变
解决方法:copy()
arr2 := make([]int,4,4)
copy(arr2,arr1)
切片删除元素
//删除第三个元素-32
a := []int={30,31,32,33,34,35,36,37}
a = append(a[0:2],a[3:]...)