在一个新的声明中设置值

huangapple go评论87阅读模式
英文:

setting values in a new declartion

问题

在Go语言中,无法在声明新类型时包含值。你只能声明一个新类型,并在之后使用new关键字来分配内存,并返回指向该类型的指针。然后,你可以使用点操作符来访问结构体字段,并为它们赋值。

在你的示例中,正确的写法是:

v := new(Vertex)
v.X, v.Y = 12, 4

这将创建一个新的Vertex类型的指针,并将XY字段的值分别设置为12和4。无法在new语句中直接为字段赋值,因为new只是为类型分配内存,并将其初始化为零值。

希望这能帮到你!

英文:

Is it possible to include values in the declaration of a new type.

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

Or because go makes the "Vertex{val, val} " a literal value instead of a basic Vertex type it's not possible?

答案1

得分: 3

你实际上不需要使用"new",你可以简单地写成:

v := Vertex{1,2}

如果你想要一个结构体,其中所有成员都设置为它们类型的零值(例如,对于整数是0,对于指针是nil,对于字符串是""等),那就更简单了:

v := Vertex{} // 等同于 Vertex{0,0}

你也可以只初始化一部分成员,让其他成员保持它们的零值:

v := Vertex{Y:1} // 等同于 Vertex{0,1}

请注意,使用这些方式,v 将是一个类型为 Vertex 的变量。如果你想要一个指向 Vertex 的指针,可以使用:

v := &Vertex{1,2}
英文:

You don't actually need "new", you can simply write:

v := Vertex{1,2}

If you want a struct with all members set to the zero value of their types (e.g., 0
for ints, nil for pointers, "" for strings, etc.), it's even simpler:

v := Vertex{} // same as Vertex{0,0}

You can also only initialize some of the members, leaving the others with their zero value:

v := Vertex{Y:1} // same as Vertex{0,1}

Note that with these v will be a variable of type Vertex. If you want a pointer to a Vertex, use:

v := &Vertex{1,2}

huangapple
  • 本文由 发表于 2014年4月29日 03:30:26
  • 转载请务必保留本文链接:https://go.coder-hub.com/23349613.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定