Go 在新的申报单中设置值

Go 在新的申报单中设置值,go,Go,是否可以在新类型的声明中包含值 type Vertex struct { X, Y int } func main() { v := new( Vertex{ 0, 0} ) // Like so fmt.Println( v ) // Instead of : v = new(Vertex) v.X, v.Y = 12, 4 // extra line for initializing the values of X and Y

是否可以在
新类型的声明中包含值

type Vertex struct {
    X, Y int
}

func main() {
    v := new( Vertex{ 0, 0} ) // Like so
    fmt.Println( v )
    // Instead of :
    v = new(Vertex) 
    v.X, v.Y = 12, 4 // extra line for initializing the values of X and Y 

    fmt.Println( v )
}
或者因为go使“顶点{val,val}”成为一个文本值而不是一个基本的顶点类型,这是不可能的?

您实际上不需要“新建”,您可以简单地编写:

v := Vertex{1,2}
如果您想要一个所有成员都设置为其类型的零值的结构(例如,
0
对于整数,
nil
用于指针,
用于字符串等),它甚至更简单:

v := Vertex{} // same as Vertex{0,0}
您也只能初始化部分成员,而将其他成员保留为零值:

v := Vertex{Y:1} // same as Vertex{0,1}
请注意,使用这些v将是Vertex类型的变量。如果需要指向顶点的指针,请使用:

v := &Vertex{1,2}

是的,这是可能的,您可以根据需要声明一个
new
对象,只需输入关键字
new
。这是两种不同的类型。使用“新建”将为您提供一个指向顶点的指针,而您使用的将为您提供一个顶点。您是对的,很抱歉忽略了这一点。我将把它添加到答案中。我现在的理解是,
new
仅在您希望将空数据类型存储到指针时才有用。正确吗?在这种情况下,您可以使用
v:=new(Vertex)
v:=&Vertex{}
-另请参见@Lemony Andrew:new仅对
int
等无法执行
和Vertex{}
的类型有用。始终使用
&顶点{/*init(如果需要)*/}
,并且从不使用新的。