Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pointers 这段Go代码如何通过指针设置对象的值而不取消引用?_Pointers_Go - Fatal编程技术网

Pointers 这段Go代码如何通过指针设置对象的值而不取消引用?

Pointers 这段Go代码如何通过指针设置对象的值而不取消引用?,pointers,go,Pointers,Go,我在Java/Python背景下学习围棋,对围棋教程中的代码感到困惑。在下面的代码中,行 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 m

我在Java/Python背景下学习围棋,对围棋教程中的代码感到困惑。在下面的代码中,行

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)
}

在go中,编译器自动将表达式转换为
(*p).X
。从:

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

谢谢,这就解释了。