Go数组问题

package main

import (
    "fmt"
)

func main() {
    a := [3]int{1, 2, 3}
    a2 := a

    for i := range a2 {
        a2[i] = 0
    }
    
    fmt.Println(a) // 输出结果为什么是[1 2 3]
}

输出结果为什么是[1 2 3],数组的赋值操作也是值传递吗,会创建一个副本?

阅读 2.5k
3 个回答
a2 := a

做的是一个数组的值拷贝,a2 是一个新的数组。

如果你希望做一个切片的引用,应该写成:

a2 := a[:]

这么写,后面就会输出 [0 0 0] 了。

因为改的是a2
a2 由 a 复制来的, 赋值会创建一个副本

    a2 := a
Go 语言的切片类型属于引用类型,同属引用类型的还有字典类型、通道类型、函数类型等;而 Go 语言的数组类型则属于值类型,同属值类型的有基础数据类型以及结构体类型

https://time.geekbang.org/col...

slice和数组的注意的地方, 可以看下这个代码,可能更清楚
https://segmentfault.com/n/13...

数组的等号赋值是深拷贝,切片的等号赋值是浅拷贝

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏