在括号中初始化Go结构有什么作用?

时间:2018-06-13 06:23:21

标签: go struct composite-literals

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

Child

但是,我最近看到用parens初始化代码:

Child

value2返回相同的Child::print()名称。

括号中的初始化是什么以及何时首选?

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

1 个答案:

答案 0 :(得分:10)

没有什么特别的,这2行是相同的。

但是,如果要在if语句中使用它,则需要使用括号,否则会出现编译时错误:

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

结果:

  

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

这是因为出现了解析模糊性:如果开括号是复合文字的一部分或if语句的主体,则不明显。

使用括号将使编译器明确无误,因此可行:

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

有关详细信息,请参阅:Struct in for loop initializer