在这种情况下括号是什么意思?

在一些源代码中我发现了这个:


if etherbase != (common.Address{}) {

    return etherbase, nil

}

etherbase是类型common.Address,它被定义为:


// Lengths of hashes and addresses in bytes.

const (

    HashLength    = 32

    AddressLength = 20

)

// Address represents the 20 byte address of an Ethereum account.

type Address [AddressLength]byte

问题是:parethesis 在这种情况下是什么意思?为什么不能省略它们?像这样:


if etherbase != common.Address{} {

    return etherbase, nil

}


红颜莎娜
浏览 96回答 1
1回答

白猪掌柜的

Go 编程语言规范复合文字当使用 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 mainconst AddressLength = 20type Address [AddressLength]bytefunc 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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go