小编典典

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

go

通常,我将初始化一个类似的结构:

item1 := Item{1, "Foo"}

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

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

reflect返回相同的Item名称。

括号中的内容起什么作用?何时首选?

这是一些Go代码可以尝试一下:


阅读 237

收藏
2020-07-02

共1个答案

小编典典

没什么特别的,那两行是相同的。

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

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

结果是:

预期的布尔表达式,找到简单的语句(是否在合成文字周围缺少括号?)(以及另外1个错误)

这是因为产生了解析歧义:左花括号是复合文字或if语句主体的一部分并不清楚。

使用括号将使其对于编译器而言是明确的,因此可以这样做:

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

有关详细信息,请参见:在for循环初始化程序中构造

2020-07-02