2 回答
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"),
}
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}
- 2 回答
- 0 关注
- 79 浏览
添加回答
举报