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

Gro*_*ify 3 struct go composite-literals

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

item1 := Item{1, "Foo"}
Run Code Online (Sandbox Code Playgroud)

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

item2 := (Item{2, "Bar"})
Run Code Online (Sandbox Code Playgroud)

reflect返回相同的Item名称.

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

试试这个是一些Go代码:

icz*_*cza 10

它没有什么特别的,那两行是相同的.

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

if i := Item{3, "a"}; i.Id == 3 {
}
Run Code Online (Sandbox Code Playgroud)

结果是:

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

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

使用括号将使编译器明确无误,因此这有效:

if i := (Item{3, "a"}); i.Id == 3 {
}
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅:struct for for for initializer