这个Go代码如何通过指针设置对象的值,而不解除引用?

时间:2015-05-26 02:27:06

标签: pointers go

我正在学习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)
}

1 个答案:

答案 0 :(得分:5)

在go中,编译器会自动将表达式转换为(*p).X。来自language spec

  

如果x的类型是命名指针类型而且(* x).f是有效的   选择器表达式表示字段(但不是方法),x.f是   (* x).f。

的简写