【发布时间】:2018-06-13 06:23:21
【问题描述】:
通常,我会初始化一个结构体:
item1 := Item{1, "Foo"}
但是,我最近看到了使用括号进行初始化的代码:
item2 := (Item{2, "Bar"})
reflect 返回相同的 Item 名称。
括号中的初始化有什么作用?什么时候首选?
这里有一些 Go 代码来试试这个:
【问题讨论】:
标签: go struct composite-literals
通常,我会初始化一个结构体:
item1 := Item{1, "Foo"}
但是,我最近看到了使用括号进行初始化的代码:
item2 := (Item{2, "Bar"})
reflect 返回相同的 Item 名称。
括号中的初始化有什么作用?什么时候首选?
这里有一些 Go 代码来试试这个:
【问题讨论】:
标签: go struct composite-literals
没什么特别的,这两行是一样的。
但是,例如,当您想在 if 语句中使用它时,括号将是必需的,否则会出现编译时错误:
if i := Item{3, "a"}; i.Id == 3 {
}
结果:
预期的布尔表达式,找到简单的语句(复合文字周围缺少括号?)(还有 1 个错误)
这是因为出现了解析歧义:左大括号是组合文字的一部分还是if 语句的主体并不明显。
使用括号将使其对编译器明确,因此有效:
if i := (Item{3, "a"}); i.Id == 3 {
}
【讨论】: