2023-08-15 golang切片相关知识

方式一:通过数组创建切片

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函数定义长度和容量才能生效
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容