我想在struct类型的变量声明中赋值,但是,我需要调用一个函数,该函数返回一个次要值(错误),我想在赋值时忽略该值。
有没有办法做到这一点?例如:
type myStruct struct{
address common.Address
}
func main() {
newVar := myStruct{
address: common.HexToAddress("xyz")
}
}
字符串
问题是common.HexToAddress()
返回2个值,一个公共.地址和一个错误。我想省略错误并如上所述分配它。我宁愿不必这样做:
var newVar2 myStruct
myStruct,_ = common.HexToAddress("xyz")
型
3条答案
按热度按时间whlutmcx1#
通常不建议忽略错误,这可能是语言不容易做到这一点的原因之一。
也就是说,你有时会看到一个模式是一个提供
Must
函数的包,对于那些只在错误上执行panic()
是正确的事情的情况;例如,当初始化包级变量时。例如,有text/template. Must。implementation简单地测试错误,如果它不是nil,就会死机。你也可以考虑添加这样一个函数(可能在你的文件本地),允许你将结构体初始化写为:
字符串
这依赖于一个特性,即如果一个函数返回多个值,而另一个函数接受相同数量的参数,则可以直接在前者的返回值上调用后者。
如果你不想走那么远,你需要显式地忽略第二个返回值,把它赋给空标识符
_
。当然,你可以单独这样做,这样你仍然可以使用结构体文字,但它可能不会比你最初建议的更干净:型
ghg1uchk2#
你可能在寻找某种语法糖。Go语言故意在这方面很稀疏,因为在语言设计者看来,这往往会使事情变得不那么明显,因此可读性较差。所以你在这里的选择有限。
如果你真的不关心错误,这里是你的选择:
按照你的建议赋值给一个临时变量(通常是最自然/可读的选项):
字符串
使用匿名函数的返回值:
型
如果您控制
common
包,请考虑添加一个忽略(或panics)错误的变体:型
编写你自己的wrapper函数:
型
dffbzjpn3#
Go从v1.18开始支持泛型。你也可以这样做:
字符串
这将支持任何类型,对于任何返回2个值的函数(在go中很常见)。
请注意,这完全忽略了(可能的)错误-我将让读者在这里做出最好的决定。