在 Go 中,结构体初始化通常使用大括号 { 和 } 完成,如以下示例所示:
<code class="go">item1 := Item{1, "Foo"}</code>
但是,也可以使用括号 () 来初始化结构体,如下所示:
<code class="go">item2 := (Item{2, "Bar"})</code>
括号初始化的影响:
两者不同形式的初始化会产生相同的 Item 值。带括号的初始化不会提供任何特定的优点或功能更改。
何时使用括号:
在某些控制结构中初始化结构体时,例如 if声明。如果没有括号,编译器可能会遇到解析歧义,从而导致错误。例如:
<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>
括号清楚地表明复合文字是一个完整的表达式,然后将其分配给 if 语句中的变量 i。
以上是在 Go 中什么时候应该使用括号进行结构体初始化?的详细内容。更多信息请关注PHP中文网其他相关文章!