【发布时间】:2018-08-09 18:13:41
【问题描述】:
我今天遇到了一个问题,并且能够快速找到并修复它,但不完全理解为什么 golang 语义会这样。
我正在使用 Go 1.10。
package main
import "fmt"
type T struct {
V int
}
var testT = T{}
func main() {
t := &(*(&testT))
t.V = 4
fmt.Println(t, testT) // test.V == t.V -> t == &testT
t1 := &testT
t2 := *t1
t3 := &t2
t3.V = 5
fmt.Println(t3, testT) // t3.V == 4 and test.T == 4 -> t3 != &testT
}
输出
&{4} {4}
&{5} {4}
我期望不等于 &testT,因此具有与 t3 相同的语义,但相反,如果我将中间结果存储在变量中,我发现 &(*(&)) 序列不具有相同的语义
我的问题
这种行为的原因是什么?
【问题讨论】:
-
这是一个github问题模板吗?
标签: pointers go dereference address-operator