1 回答
TA贡献1893条经验 获得超10个赞
当使用 LiteralType 的 TypeName 形式的复合文字出现在关键字和“if”、“for”或“switch”语句块的左大括号之间的操作数时,会出现解析歧义,并且复合文字是不包含在圆括号、方括号或大括号中。在这种罕见的情况下,文字的左大括号被错误地解析为引入语句块的大括号。为了解决歧义,复合文字必须出现在括号内。
if x == (T{a,b,c}[i]) { … } if (x == T{a,b,c}[i]) { … }
块common.Address{}之前的歧义复合文字。if{ … }
if etherbase != common.Address{} {
return etherbase, nil
}
(common.Address{})块 { … }之前的明确复合文字if。
if etherbase != (common.Address{}) {
return etherbase, nil
}
例如,
package main
const AddressLength = 20
type Address [AddressLength]byte
func f(etherbase Address) (Address, error) {
// Unambiguous
if etherbase != (Address{}) {
return etherbase, nil
}
return Address{}, nil
}
func g(etherbase Address) (Address, error) {
// Ambiguous
if etherbase != Address{} {
return etherbase, nil
}
return Address{}, nil
}
func main() {}
游乐场:https://play.golang.org/p/G5-40eONgmD
- 1 回答
- 0 关注
- 95 浏览
添加回答
举报