我想在 struct 类型的变量声明中分配一个值,但是,我需要调用一个返回辅助值(错误)的函数,我想在赋值中忽略该值。
有办法这样做吗?例如:
type myStruct struct{
address common.Address
}
func main() {
newVar := myStruct{
address: common.HexToAddress("xyz")
}
}
Run Code Online (Sandbox Code Playgroud)
问题是common.HexToAddress()返回 2 个值,一个 common.Address 以及一个错误。我想忽略该错误并按上面的方式分配它。我宁愿不必这样做:
var newVar2 myStruct
myStruct,_ = common.HexToAddress("xyz")
Run Code Online (Sandbox Code Playgroud)
小智 5
通常并不完全建议忽略错误,这可能是该语言不能使这一点变得容易的原因之一。
话虽如此,您有时看到的模式是提供Must功能的包,对于那些只对panic()错误执行 a 的情况是正确的做法;例如,在初始化包级变量时。
例如,有text/template.Must。该实现只是测试错误并在错误不为零时发生恐慌。您也可以考虑添加这样的函数(可能在文件本地),允许您将结构初始化编写为:
newVar := myStruct{
address: must(common.HexToAddress("xyz")),
}
// ...
func must(address common.Address, err error) common.Address { ... }
Run Code Online (Sandbox Code Playgroud)
这依赖于这样的功能:如果一个函数返回多个值,而另一个函数采用相同数量的参数,则可以直接在前一个函数的返回值上调用后者。
如果您不想走那么远,则需要通过将第二个返回值分配给空白标识符来显式忽略它_。您当然可以单独执行此操作,以便您仍然可以使用结构文字,但它可能不会比您最初建议的更清晰:
address, _ := common.HexToAddress("xyz")
newVar := myStruct{address: address}
Run Code Online (Sandbox Code Playgroud)