方式一:通过数组创建切片
var arr1 = [5]int{1, 2, 3} // 声明一个类型为int类型,长度为5的切片,后面两个0为默认值
fmt.Println(arr1, len(arr1), cap(arr1), "切片一") //[1,2,3,0,0] 5 5
方式二:通过make函数创建(类型, 长度, 容量),如果没有指定容量则和长度一样
var arr3 = make([]int, 3, 5)
fmt.Println(arr3, len(arr3), cap(arr3), "切片三") // [0,0,0] 3 5
方式三:使用语法糖,不能指定长度,容量和长度相等
arr4 := []int{1, 2, 3}
fmt.Println(arr4, len(arr4), cap(arr4), "切片四") // [1,2,3] 3 3
#注意:使用索引获取数据不能越界
一些扩展
切片截取(开始位置:结束位置)
var arr2 = arr1[2:3] // 截取切片索引2到3的数组
fmt.Println(arr2, len(arr2), cap(arr2), "切片二") // [3] 1 3
如果希望切片自动扩容则需要使用append函数
arr4 = append(arr4, 4, 5)
fmt.Println(arr4, len(arr4), cap(arr4), "扩容后的切片四") // [1 ,2 ,3 ,4 ,5] 5 6
直接赋值是指向的同一个引用地址,一旦修改,源数据也会被修改
arr5 := arr4
arr5[3] = 9
fmt.Println(arr4, "切片四") // [1,2,3,9,5]
fmt.Println(arr5, "切片五") // [1,2,3,9,5]
可以使用copy函数拷贝(目标切片, 源切片),会将源切片中数据拷贝到目标切片中
var arr6 []int
copy(arr6, arr4)
fmt.Println(arr4, "切片四") // [1,2,3,9,5]
fmt.Println(arr6, "切片六") // [] ??
// 这里使用copy函数时,arr6 初始化需要使用make函数定义长度和容量才能生效