猿问

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

我想在结构类型的变量声明中赋值,但是,我需要调用一个函数,该函数返回一个次要值(错误),我想在赋值中忽略该值。


有没有办法做到这一点?例如:


type myStruct struct{

    address common.Address

}



func main() {

    newVar := myStruct{

      address: common.HexToAddress("xyz") 

    }

}

问题是返回 2 个值,这是常见的。地址以及错误。我想省略错误并如上所述分配它。我宁愿不必做:common.HexToAddress()


var newVar2 myStruct

myStruct,_ = common.HexToAddress("xyz") 


慕沐林林
浏览 107回答 2
2回答

UYOU

你可能正在寻找某种语法糖。Go故意在这些事情上稀疏,因为在语言设计师看来,它往往会使事情变得不那么晦涩难懂,从而降低可读性。所以你在这里的选择有限。如果您真的不关心错误,以下是您的选择:按照您的建议分配给临时变量(通常是最自然/可读的选项):addr, _ := common.HexToAddress("xyz")newVar := myStruct{    address: addr,}使用匿名函数的返回值:newVar := myStruct{    address: func() common.Address { addr, _ := common.HexToAddress("xyz"); return addr }(),}如果您控制了包,请考虑添加一个忽略(或导致)错误的变体:commonnewVar := myStruct{    address: common.MustHexToAddress("xyz"),}编写您自己的包装器函数:func hexToAddress(hex string) common.Address {    addr, _ := common.HexToAddress(hex)    return addr}newVar := myStruct{    address: hexToAddress("xyz"),}

汪汪一只猫

通常不建议忽略错误,这可能是该语言不容易的原因之一。话虽如此,您有时看到的模式是提供功能的软件包,对于那些只是在错误上执行操作是正确的做法的情况;例如,在初始化包级变量时。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}
随时随地看视频慕课网APP

相关分类

Go
我要回答