通常,我将初始化一个类似的结构:
item1 := Item{1, "Foo"}
但是,我最近看到了用括号初始化的代码:
item2 := (Item{2, "Bar"})
reflect返回相同的Item名称。
reflect
Item
括号中的内容起什么作用?何时首选?
这是一些Go代码可以尝试一下:
没什么特别的,那两行是相同的。
但是,例如,当您要在if语句中使用它时,将需要使用括号,否则会出现编译时错误:
if
if i := Item{3, "a"}; i.Id == 3 { }
结果是:
预期的布尔表达式,找到简单的语句(是否在合成文字周围缺少括号?)(以及另外1个错误)
这是因为产生了解析歧义:左花括号是复合文字或if语句主体的一部分并不清楚。
使用括号将使其对于编译器而言是明确的,因此可以这样做:
if i := (Item{3, "a"}); i.Id == 3 { }
有关详细信息,请参见:在for循环初始化程序中构造