duangutian1426 2019-01-31 11:45
浏览 47
已采纳

Go变量初始化语法

I notice two styles of initializing a struct type variable in Go code examples but I don't understand when to use each.

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

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

The first style is a simples variable initilization but the second is more obscure to me. What the curly braces do? Why should I use the second form?

EDIT:

For more context on the question, it arrised from this sample code of the Go Kit library: https://github.com/go-kit/kit/blob/master/examples/profilesvc/cmd/profilesvc/main.go

  • 写回答

2条回答 默认 最新

  • dongqiao3214 2019-01-31 11:51
    关注

    What the curly braces do?

    They denote a code block. You use code blocks when you want to restrict scope of an identifier (to that block). Here it doesn't make sense, indeed, because you only have one identifier and it's from the outer scope.

    Some reading:

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 adb push异常 adb: error: 1409-byte write failed: Invalid argument
  • ¥15 android报错 brut.common.BrutException: could not exec (exit code = 1)
  • ¥15 nginx反向代理获取ip,java获取真实ip
  • ¥15 eda:门禁系统设计
  • ¥50 如何使用js去调用vscode-js-debugger的方法去调试网页
  • ¥15 376.1电表主站通信协议下发指令全被否认问题
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥15 复杂网络,变滞后传递熵,FDA
  • ¥20 csv格式数据集预处理及模型选择
  • ¥15 部分网页页面无法显示!