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