括号与大括号:初始化 Go 结构体
在 Go 中,可以使用两个大括号来初始化结构体(例如 item1 := Item{ 1, "Foo"}) 和括号(例如 item2 := (Item{2, "Bar"}))。尽管语法存在差异,但这两种方法都会产生相同的结果并返回相同的结构名称。
当括号是必需的时
尽管括号对于大多数结构初始化来说不是必需的,但它们当结构体用作条件表达式的一部分时,这一点变得至关重要。如果没有括号,解析过程中会出现歧义,从而导致编译器错误。例如:
<code class="go">if i := Item{3, "a"}; i.Id == 3 { }</code>
歧义解决
错误源于左大括号是否属于复合文字或 if 语句主体的不确定性。通过将结构初始化括在括号内,编译器可以明确地将表达式解释为复合文字。
<code class="go">if i := (Item{3, "a"}); i.Id == 3 { }</code>
迭代中的括号
除了条件语句之外,括号在循环迭代器中初始化结构体时也需要:
<code class="go">for i := (Item{3, "a"}); i.Id < 10; i = (Item{i.Id + 1, "b"}) { }</code>
结论
无论带或不带括号初始化 Go 结构体都会产生相同的结构表示,但使用括号在特定场景下是必要的:
以上是括号何时对于初始化 Go 结构体至关重要?的详细内容。更多信息请关注PHP中文网其他相关文章!