我正在从Java / Python背景中学习Go,并且对Go教程中的代码感到困惑。在以下代码中,该行
p.X = 1e9
使用指针p将vX的值设置为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)
}
在进行中,编译器自动将表达式转换为(*p).X
。根据语言规范:
如果x的类型是命名指针类型,并且(* x).f是表示字段的有效选择器表达式(但不是方法),则xf是(* x).f的简写。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句