通常,我会初始化一个结构,例如:
item1 := Item{1, "Foo"}
但是,我最近看到用括号初始化的代码:
item2 := (Item{2, "Bar"})
reflect
返回相同的Item
name.
括号中的初始化有什么作用以及何时首选?
下面是一些用于尝试此操作的 Go 代码:
- 操场:https://play.golang.org/p/_gsaruS_DVi
它没有什么特别的,这两行是相同的。
但是,当您想在if
例如,语句中需要括号,否则会出现编译时错误:
if i := Item{3, "a"}; i.Id == 3 {
}
结果是:
预期的布尔表达式,发现简单的语句(复合文字周围缺少括号?)(还有 1 个错误)
这是因为出现了解析歧义:左大括号是否是复合文字的一部分或正文的一部分并不明显。if
陈述。
使用括号将使编译器明确,所以这是有效的:
if i := (Item{3, "a"}); i.Id == 3 {
}
详细信息请参见:for 循环初始值设定项中的结构
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)