【问题标题】:What does initializing a Go struct in parentheses do?在括号中初始化 Go 结构有什么作用?
【发布时间】:2018-06-13 06:23:21
【问题描述】:

通常,我会初始化一个结构体:

item1 := Item{1, "Foo"}

但是,我最近看到了使用括号进行初始化的代码:

item2 := (Item{2, "Bar"})

reflect 返回相同的 Item 名称。

括号中的初始化有什么作用?什么时候首选?

这里有一些 Go 代码来试试这个:

【问题讨论】:

    标签: go struct composite-literals


    【解决方案1】:

    没什么特别的,这两行是一样的。

    但是,例如,当您想在 if 语句中使用它时,括号将是必需的,否则会出现编译时错误:

    if i := Item{3, "a"}; i.Id == 3 {
    }
    

    结果:

    预期的布尔表达式,找到简单的语句(复合文字周围缺少括号?)(还有 1 个错误)

    这是因为出现了解析歧义:左大括号是组合文字的一部分还是if 语句的主体并不明显。

    使用括号将使其对编译器明确,因此有效:

    if i := (Item{3, "a"}); i.Id == 3 {
    }
    

    详情见:Struct in for loop initializer

    【讨论】:

      猜你喜欢
      • 2012-08-04
      • 2011-09-09
      • 1970-01-01
      • 2020-10-20
      • 2018-07-13
      • 2013-08-23
      • 2018-05-14
      • 2021-07-14
      • 2018-03-06
      相关资源
      最近更新 更多