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]
,数组的赋值操作也是值传递吗,会创建一个副本?
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]
,数组的赋值操作也是值传递吗,会创建一个副本?
因为改的是a2
a2 由 a 复制来的, 赋值会创建一个副本
a2 := a
Go 语言的切片类型属于引用类型,同属引用类型的还有字典类型、通道类型、函数类型等;而 Go 语言的数组类型则属于值类型,同属值类型的有基础数据类型以及结构体类型
https://time.geekbang.org/col...
slice和数组的注意的地方, 可以看下这个代码,可能更清楚
https://segmentfault.com/n/13...
7 回答5.3k 阅读
6 回答6.8k 阅读✓ 已解决
4 回答2.3k 阅读
1 回答3.3k 阅读
2 回答894 阅读✓ 已解决
2 回答2.2k 阅读
1 回答2.1k 阅读
做的是一个数组的值拷贝,a2 是一个新的数组。
如果你希望做一个切片的引用,应该写成:
这么写,后面就会输出 [0 0 0] 了。