如果我有一个看起来像这样的功能
func ThisIsMyComplexFunc() (ComplexStruct, error)
其中ComplexStruct是一个通常包含大量值的大结构。
如果函数在开始构建我的结构之前就开始偶然发现错误怎么办,理想情况下我只想返回错误,例如
return nil, err
但它不会让我这样做,它迫使我创建一个虚拟复杂结构并将其与错误一起返回,即使我从不想使用该结构。
有解决方法吗?
答案 0 :(得分:3)
如果声明函数返回两个值,则需要返回两个值。
可以简化代码的一个选项是使用命名返回值:
func ThisIsMyComplexFunc() (s ComplexStruct, err error) {
...
}
现在您可以分配到s
和/或err
,然后使用裸return
语句。您仍将返回ComplexStruct
值,但不需要手动初始化它(它将默认为零值)。
答案 1 :(得分:2)
您可以返回指向结构的指针:
func ThisIsMyComplexFunc() (*ComplexStruct, error) {
...
if somethingIsWrong {
return nil, err
}
...
return &theStructIBuilt, nil
}
一般来说,通过指针传递大结构会更便宜,因为复制指针比整个结构更容易。