【问题标题】:setting values in a new declartion在新声明中设置值
【发布时间】:2014-04-29 05:07:54
【问题描述】:

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

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 使 "Vertex{val, val} " 成为文字值而不是基本的 Vertex 类型是不可能的?

【问题讨论】:

  • 是的,有可能,您可以随时声明new 对象,只需我的关键字new。谷歌文档。

标签: go


【解决方案1】:

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

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 仅在您要将空数据类型存储到指针时有用。对吗?
  • 在这种情况下,您可以使用v:=new(Vertex)v:=&Vertex{} - 另请参阅stackoverflow.com/questions/3129068/…
  • @Lemony-Andrew: new 只对像int 这样你不能做&Vertex{} 的类型有用。始终使用&Vertex{/* init if needed */},永远不要使用新的。
猜你喜欢
  • 2021-09-28
  • 1970-01-01
  • 1970-01-01
  • 2011-03-01
  • 1970-01-01
  • 2023-03-12
  • 2019-11-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多