Go 围棋教程:什么是&;你在干什么?

Go 围棋教程:什么是&;你在干什么?,go,Go,我正在做围棋教程,我有一个关于这个练习的问题 我以前只在初级C代码中使用过指针和地址。我的理解是,行p=&Vertex{1,2}//has type*Vertex将一个新变量p指向Vertex的地址 这难道不是重新定义struct的定义来设置X,Y int=1,2 以下是本教程的完整代码: package main import "fmt" type Vertex struct { X, Y int } var ( v1 = Vertex{1, 2} // has typ

我正在做围棋教程,我有一个关于这个练习的问题

我以前只在初级C代码中使用过指针和地址。我的理解是,行
p=&Vertex{1,2}//has type*Vertex
将一个新变量
p
指向
Vertex
的地址

这难道不是重新定义
struct
的定义来设置
X,Y int=1,2

以下是本教程的完整代码:

package main

import "fmt"

type Vertex struct {
    X, Y int
}

var (
    v1 = Vertex{1, 2}  // has type Vertex
    v2 = Vertex{X: 1}  // Y:0 is implicit
    v3 = Vertex{}      // X:0 and Y:0
    p  = &Vertex{1, 2} // has type *Vertex
)

func main() {
    fmt.Println(v1, p, v2, v3)
}

var p=&Vertex{1,2}
执行以下操作:

  • 创建类型为
    Vertex
    的匿名变量,其值为1
    x
    和2表示
    y
  • 创建
    *顶点类型的变量
    p
    (指针 到
    顶点
  • p
    设置为指向匿名变量

它不影响类型的定义。

好,我缺少匿名变量部分。出于好奇,有没有办法找到这个匿名变量?这样做的实际应用是什么?您只能通过指针访问它。当情况需要指向特定类型的指针时,您经常会看到这样做。例如,包可能定义一个
New()
函数,该函数返回指向类型的初始化实例的指针。这可以通过
return&MyType{field1:val1,field2:val2}
之类的方法来实现。有关我提到的用法的更多信息: