Go变量初始化语法

Go变量初始化语法,go,Go,在Go代码示例中,我注意到初始化结构类型变量有两种方式,但我不知道何时使用它们 风格1: 主程序包 进口( “fmt” ) 类型Msg struct{ 值字符串 } func NewMsg(值字符串)(Msg){ 返回消息{value} } func main(){ fmt.Println(“你好,游乐场”) var helloMsg Msg helloMsg=NewMsg(“oi”) fmt.Println(“Hello,”,helloMsg.value) } 风格2: 主程序包 进口( “

在Go代码示例中,我注意到初始化结构类型变量有两种方式,但我不知道何时使用它们

风格1:

主程序包
进口(
“fmt”
)
类型Msg struct{
值字符串
}
func NewMsg(值字符串)(Msg){
返回消息{value}
}
func main(){
fmt.Println(“你好,游乐场”)
var helloMsg Msg
helloMsg=NewMsg(“oi”)
fmt.Println(“Hello,”,helloMsg.value)
}
风格2:

主程序包
进口(
“fmt”
)
类型Msg struct{
值字符串
}
func NewMsg(值字符串)(Msg){
返回消息{value}
}
func main(){
fmt.Println(“你好,游乐场”)
var helloMsg Msg
{
helloMsg=NewMsg(“oi”)
}
fmt.Println(“Hello,”,helloMsg.value)
}
第一种样式是simples变量初始化,但第二种样式对我来说更模糊。花括号做什么?我为什么要使用第二种形式

编辑:

有关该问题的更多上下文,请参见Go Kit库的示例代码:

花括号做什么

它们表示一个代码块。当您想要限制标识符的作用域(到该块)时,可以使用代码块。实际上,在这里它没有意义,因为您只有一个标识符,并且它来自外部范围

一些阅读:


    • 我看不出这两种风格有什么不同。 他们完全一样

      {}
      这定义了范围代码,其中声明的一些变量只能在该范围内使用。 但是如果您在
      {}
      块外部声明
      helloMsg
      ,并在
      {}
      块内部声明
      =
      “helloMsg”尚未确定范围


      因此,这两种格式化样式完全相同。

      初始化样式之间没有区别。这只是构造代码和在块中放一行的区别。我想您想问一下
      var x Type
      x:=y
      链接代码的作者使用块对语句进行分组。它可以在任何地方使用,不仅用于初始化。在此范围内,它们不作为代码块,而是用于对相同类型的多个变量进行分组(类似于切片)。@djtastatur:不正确。与“同一类型”无关。这只是一个代码块。在这个上下文中使用代码块没有特别的原因。块内没有声明任何变量,因此可以省略大括号而不改变其含义。但是语法与如下初始化类似:
      helloMsg:=Msg{value:“oi”}