Go变量初始化语法

时间:2019-01-31 11:45:25

标签: go

我在Go代码示例中注意到了两种初始化struct类型变量的样式,但是我不知道何时使用每种样式。

样式1:

package main

import (
    "fmt"
)

type Msg struct {
  value string
}

func NewMsg(value string) (Msg) {
  return Msg{value}
}

func main() {
  fmt.Println("Hello, playground")

  var helloMsg Msg
  helloMsg = NewMsg("oi")

  fmt.Println("Hello, ", helloMsg.value)
}

样式2:

package main

import (
    "fmt"
)

type Msg struct {
  value string
}

func NewMsg(value string) (Msg) {
  return Msg{value}
}

func main() {
  fmt.Println("Hello, playground")

  var helloMsg Msg
  {
     helloMsg = NewMsg("oi")
  }

  fmt.Println("Hello, ", helloMsg.value)
}

第一种样式是简单变量的初始化,但是第二种样式对我来说却比较模糊。花括号做什么?为什么要使用第二种形式?

编辑:

有关该问题的更多背景信息,请访问Go Kit库的以下示例代码:https://github.com/go-kit/kit/blob/master/examples/profilesvc/cmd/profilesvc/main.go

2 个答案:

答案 0 :(得分:3)

  

花括号做什么?

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

一些阅读:

答案 1 :(得分:0)

我看不到这两种样式之间的区别。 他们是完全一样的。

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

所以,这两种格式的样式完全相同。