我正在学习Java / Python背景,并且对Go教程中的代码感到困惑。在以下代码中,行
p.X = 1e9
使用指针p将v.X的值设置为1e9。 由于p只是一个指向v的指针,是不是需要解引用来设置v的值?因此正确的陈述是:
*p.X = 1e9
当然,这会导致错误。有人可以解释为什么Go示例代码可以正常工作吗?
有问题的代码:
package main
import (
"fmt"
)
type Vertex struct {
X int
Y int
}
func main() {
v := Vertex{1, 2}
p := &v
p.X = 1e9
fmt.Println(v)
}
答案 0 :(得分:5)
在go中,编译器会自动将表达式转换为(*p).X
。来自language spec:
如果x的类型是命名指针类型而且(* x).f是有效的 选择器表达式表示字段(但不是方法),x.f是 (* x).f。
的简写