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...
2 回答2.7k 阅读✓ 已解决
1 回答2.4k 阅读✓ 已解决
2 回答1.8k 阅读✓ 已解决
1 回答1.3k 阅读✓ 已解决
1 回答1.5k 阅读✓ 已解决
2 回答1.4k 阅读
1 回答1.9k 阅读
做的是一个数组的值拷贝,a2 是一个新的数组。
如果你希望做一个切片的引用,应该写成:
这么写,后面就会输出 [0 0 0] 了。