创建变量将创建副本,而取消引用则不会。为什么?

时间:2019-03-26 22:41:21

标签: pointers go

为什么将值放入变量会创建副本,而取消引用却不会呢?

这是对编译器的简单优化吗?它知道它只能使用原始结构的地址,而创建变量时总是会分配新的内存?

示例1:

x1 := &struct{ x int }{x: 0}
y1 := *x1
z1 := &y1
z1.x++

fmt.Printf("--- 1:\n%#v\n%#v\n", x1, z1)

示例2:

x2 := &struct{ x int }{x: 0}
z2 := &*x2
z2.x++

fmt.Printf("--- 2:\n%#v\n%#v\n", x2, z2)

在此处运行:https://play.golang.org/p/myugNmjrQFj

go文档中是否有描述此行为的一部分?

1 个答案:

答案 0 :(得分:0)

  

go文档中是否有描述此行为的一部分?

是,语言规范。参见https://golang.org/ref/spec