测试环境:win64,go版本:1.21.8 IDE:GoLand
一般的我们知道,slice本身是不存数据的,是对于底层数组的引用,所以最接近底层的创建slice的方法可以这样写:
arr := [5]int{1, 2, 3, 4, 5} sliceInt := arr[:]
sliceInt 的底层数据就是arr
我这次记录下我平时不太会用到的用三个参数创建,大致测试如下:
func main() { arr := [5]int{1, 2, 3, 4, 5} sliceInt := arr[0:3:4] fmt.Println(cap(sliceInt), len(sliceInt), sliceInt) sliceInt[2] = 10 sliceInt = append(sliceInt, 11) fmt.Println(arr) sliceInt = append(sliceInt, 11) fmt.Println(arr) }
输出结果如下
4 3 [1 2 3] [1 2 10 11 5] [1 2 10 11 5]
这里的sliceInt底层就是arr数组,cap为4,len为3。此时还有一个空位可以使用,因此当只向sliceInt中append一次数据时,会修改原来arr数组的数据,当再一次append操作时会触发切片的扩容,arr数组的数据也就不会被修改了。
sliceInt := arr[0:3:4]
从上面也能看到4表示了引用到数组最后哪个位置。语法上go规定从数组上创建slice时后面的参数一定是大于等于前面的,如果所示:
如果小于的话会IDE会直接报错。
记录以及分享,有问题可以问,看到有价值的会回复。
标签:11,sliceInt,arr,slice,Golang,数组,append From: https://www.cnblogs.com/currentM/p/18622604