Go 即使出现错误,我是否总是必须返回值
如果我有这样一个函数Go 即使出现错误,我是否总是必须返回值,go,Go,如果我有这样一个函数 func ThisIsMyComplexFunc() (ComplexStruct, error) 其中ComplexStruct是一个大结构,通常包含值的加载 如果函数在一开始就遇到错误,甚至在我开始构建结构之前,理想情况下我只想返回错误,例如 return nil, err 但它不允许我这样做,它迫使我创建一个虚拟的复杂结构,并将其与错误一起返回,即使我从不想使用该结构 有办法解决这个问题吗?您可以返回指向结构的指针: func ThisIsMyComple
func ThisIsMyComplexFunc() (ComplexStruct, error)
其中ComplexStruct是一个大结构,通常包含值的加载
如果函数在一开始就遇到错误,甚至在我开始构建结构之前,理想情况下我只想返回错误,例如
return nil, err
但它不允许我这样做,它迫使我创建一个虚拟的复杂结构,并将其与错误一起返回,即使我从不想使用该结构
有办法解决这个问题吗?您可以返回指向结构的指针:
func ThisIsMyComplexFunc() (*ComplexStruct, error) {
...
if somethingIsWrong {
return nil, err
}
...
return &theStructIBuilt, nil
}
一般来说,按指针传递大结构会更便宜,因为复制指针比复制整个结构更容易。您可以返回指向该结构的指针:
func ThisIsMyComplexFunc() (*ComplexStruct, error) {
...
if somethingIsWrong {
return nil, err
}
...
return &theStructIBuilt, nil
}
一般来说,按指针传递大结构会更便宜,因为复制指针比复制整个结构更容易。如果函数声明为返回两个值,则需要返回两个值 可以简化代码的一个选项是使用命名返回值:
func ThisIsMyComplexFunc() (s ComplexStruct, err error) {
...
}
现在您可以只分配给s和/或err,然后使用一个简单的return语句。您仍将返回ComplexStruct值,但不需要手动初始化它,它将默认为零值。如果您的函数声明为返回两个值,则需要返回两个值 可以简化代码的一个选项是使用命名返回值:
func ThisIsMyComplexFunc() (s ComplexStruct, err error) {
...
}
现在您可以只分配给s和/或err,然后使用一个简单的return语句。您仍然将返回一个复杂的结构值,但是您不需要手动初始化它,它将默认为零值。考虑阅读文章。