会变瘦的圣君

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

测试环境: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会直接报错。

 

记录以及分享,有问题可以问,看到有价值的会回复。

posted on 2024-12-22 21:39  会变瘦的圣君  阅读(12)  评论(0)    收藏  举报