登录
首页 >  Golang >  Go问答

在golang中,数组赋值与语法有何异同?

来源:stackoverflow

时间:2024-03-20 17:18:30 388浏览 收藏

在 Go 语言中,数组赋值和语法有相似之处和不同之处。赋值运算符 := 可以用于创建数组的副本或切片,具体取决于其后跟的语法。 arr1 := [...]int{1, 2, 3} 创建一个长度为 3 的数组并将其赋值给变量 arr1。arr2 := arr1 创建一个指向 arr1 底层数组的新数组,对 arr1 的修改也会影响 arr2。 另一方面,b := a[:] 创建一个切片,该切片引用数组 a 的底层数据。修改切片元素将修改底层数组,但修改切片本身不会影响底层数组。

问题内容

我目前正在学习 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]

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


解决方案


切片不会复制切片的数据。它创建一个新的切片值 指向原始数组。这使得切片操作为 操作数组索引非常高效。因此,修改 重新切片的元素(不是切片本身)修改了 原始切片

https://blog.golang.org/slices-intro

检查上面的链接以了解 Slice 背后的内部结构

好了,本文到此结束,带大家了解了《在golang中,数组赋值与语法有何异同?》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>