我今天遇到了一个问题,并且能够快速找到并修复它,但不完全理解为什么 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 相同的语义,但是相反,如果我将中间结果存储在变量中,我看到 &(*(&)) 序列没有相同的语义
我的问题
这种行为的原因是什么?