为什么用户指向golang中的结构?

为什么用户指向golang中的结构?,go,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) } 我可以只执行v.X来获得相同的值,而不是分配指针(p=&v,然后是p.X)。 有没有一种设计模式会在以后出现呢?是的,你可以做v.X=1e9。这就

从围棋教程-

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)
}
我可以只执行v.X来获得相同的值,而不是分配指针(p=&v,然后是p.X)。
有没有一种设计模式会在以后出现呢?

是的,你可以做
v.X=1e9
。这就是示例的要点,
v.X=1e9
p:=&v;p、 X=1e9
是等效的。这是一个简单的例子来说明指针是如何工作的。这不是为了实用

一旦开始将结构传递给方法,指针就变得非常重要。假设您想编写一个设置X的方法。如果我们将结构作为值传递

func (v Vertex) setX(newX int) {
    v.X = newX
}

func main() {
    v := Vertex{1, 2}
    v.setX(1e9)
    fmt.Println(v)
}
我们得到
{12}
。还没定下来。这是因为Go将值复制到方法中
setX
在结构的副本上工作

相反,我们传递一个指针

func (v *Vertex) setX(newX int) {
    v.X = newX
}
现在我们得到了
{10000000002}
setX
正在处理指向结构的指针

注意
v.setX(1e9)
实际上是
(&v).setX(1e9)
,但请为您翻译

方法不是唯一有用的位置指针。如果要在多个位置处理相同的数据,请使用指针

func (v *Vertex) setX(newX int) {
    v.X = newX
}

请参阅和。

我将解释您的问题或至少是一个非常类似的问题。只需完成围棋的完整教程。指针非常简单,没有什么可担心的,大多数时候它并不重要,重要的时候它是显而易见的。谢谢@Volker,我刚刚开始使用它,它与我习惯的动态类型语言JS有很大不同。谢谢@Schwenn!我很快就会在围棋之旅中找到一些方法,然后我想这一切对我来说都会变得更有意义。在JS中,我将定义一个对象,并开始传递该对象的副本以实现不变性。