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

如何在结构值赋值期间省略函数调用的辅助返回

如何在结构值赋值期间省略函数调用的辅助返回

Go
慕沐林林 2022-09-19 17:10:32
我想在结构类型的变量声明中赋值,但是,我需要调用一个函数,该函数返回一个次要值(错误),我想在赋值中忽略该值。有没有办法做到这一点?例如:type myStruct struct{    address common.Address}func main() {    newVar := myStruct{      address: common.HexToAddress("xyz")     }}问题是返回 2 个值,这是常见的。地址以及错误。我想省略错误并如上所述分配它。我宁愿不必做:common.HexToAddress()var newVar2 myStructmyStruct,_ = common.HexToAddress("xyz") 
查看完整描述

2 回答

?
UYOU

TA贡献1878条经验 获得超4个赞

你可能正在寻找某种语法糖。Go故意在这些事情上稀疏,因为在语言设计师看来,它往往会使事情变得不那么晦涩难懂,从而降低可读性。所以你在这里的选择有限。


如果您真的不关心错误,以下是您的选择:


按照您的建议分配给临时变量(通常是最自然/可读的选项):


addr, _ := common.HexToAddress("xyz")

newVar := myStruct{

    address: addr,

}

使用匿名函数的返回值:


newVar := myStruct{

    address: func() common.Address { addr, _ := common.HexToAddress("xyz"); return addr }(),

}

如果您控制了包,请考虑添加一个忽略(或导致)错误的变体:common


newVar := myStruct{

    address: common.MustHexToAddress("xyz"),

}

编写您自己的包装器函数:


func hexToAddress(hex string) common.Address {

    addr, _ := common.HexToAddress(hex)

    return addr

}


newVar := myStruct{

    address: hexToAddress("xyz"),

}


查看完整回答
反对 回复 2022-09-19
?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

通常不建议忽略错误,这可能是该语言不容易的原因之一。


话虽如此,您有时看到的模式是提供功能的软件包,对于那些只是在错误上执行操作是正确的做法的情况;例如,在初始化包级变量时。Mustpanic()


例如,有文本/模板。必须的。该实现只是测试错误,如果它不是零,则会崩溃。您也可以考虑添加这样的函数(可能是文件的本地函数),允许您将结构初始化编写为:


newVar := myStruct{

  address: must(common.HexToAddress("xyz")),

}

// ...

func must(address common.Address, err error) common.Address { ... }

这依赖于这样一个功能,即如果一个函数返回多个值,而另一个函数采用相同数量的参数,则可以直接在前者的返回值上调用后者。


如果您不想走那么远,则需要通过将第二个返回值分配给空白标识符来显式忽略该值。当然,您可以单独执行此操作,以便您仍然可以使用结构文本,但它可能不会比您最初建议的更干净:_


address, _ := common.HexToAddress("xyz")

newVar := myStruct{address: address}


查看完整回答
反对 回复 2022-09-19
  • 2 回答
  • 0 关注
  • 79 浏览
慕课专栏
更多

添加回答

举报

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