为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
红颜莎娜 2023-03-21 15:10:34
在一些源代码中我发现了这个: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}
查看完整描述

1 回答

?
白猪掌柜的

TA贡献1893条经验 获得超10个赞

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 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


查看完整回答
反对 回复 2023-03-21
  • 1 回答
  • 0 关注
  • 95 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信