在 golang 中,[:] 语法与数组赋值有什么不同?

我目前正在浏览GoLang教程,并有以下疑问。


arr1:=[...]int{1,2,3}

arr2:=arr1

arr1[1]=99

fmt.Println(arr1)

fmt.Println(arr2)

它输出以下语句


[1 99 3]

[1 2 3]

这里只修改了数组a,这是有道理的,因为数组被视为值。


如果我尝试遵循事情变得令人困惑


a:=[...]int{1,2,3}

b:=a[:]

a[1]=88

fmt.Println(a)

fmt.Println(b)

这导致打印


[1 88 3]

[1 88 3]

问题:这是否意味着说创建了数组的副本,并且说将创建一个指向基础数组的切片(在本例中为“a”)?b:=ab:=a[:]


猛跑小猪
浏览 107回答 1
1回答

泛舟湖上清波郎朗

切片不会复制切片的数据。它将创建一个指向原始数组的新切片值。这使得切片操作与操作数组索引一样高效。因此,修改重新切片的元素(而不是切片本身)会修改原始切片的元素https://blog.golang.org/slices-intro检查上面的链接,了解切片背后的内部结构
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go