在 Go 中初始化结构体时,不需要使用括号,但在某些情况下可以首选。
通常,结构体是使用大括号初始化的,如图所示在:
<code class="go">item1 := Item{1, "Foo"}</code>
但是,用括号初始化结构体同样有效:
<code class="go">item2 := (Item{2, "Bar"})</code>
这两行都创建 Item 结构体的实例,并将它们分别分配给 item1 和 item2。两个结构体上的反射将返回相同的名称。
括号主要用于在 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>
在这种情况下,括号明确指示复合文字是分配给 i 的值。有关更多详细信息,请参阅“for 循环初始值设定项中的结构”页面。
以上是初始化 Go 结构体时什么时候需要括号?的详细内容。更多信息请关注PHP中文网其他相关文章!