我在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
答案 0 :(得分:3)
花括号做什么?
它们表示一个代码块。当您想将标识符的范围限制到该代码块时,可以使用代码块。实际上,这里没有任何意义,因为您只有一个标识符,并且来自外部范围。
一些阅读:
答案 1 :(得分:0)
我看不到这两种样式之间的区别。 他们是完全一样的。
{}
定义了作用域代码,其中声明的一些变量只能在该作用域内使用。
但是,如果在外部声明helloMsg
并在=
块内执行{}
。 “ helloMsg”尚未确定范围。
所以,这两种格式的样式完全相同。