即使出错,我也总是要返回一个值

时间:2013-12-01 14:31:56

标签: go

如果我有一个看起来像这样的功能

  func ThisIsMyComplexFunc() (ComplexStruct, error)

其中ComplexStruct是一个通常包含大量值的大结构。

如果函数在开始构建我的结构之前就开始偶然发现错误怎么办,理想情况下我只想返回错误,例如

  return nil, err

但它不会让我这样做,它迫使我创建一个虚拟复杂结构并将其与错误一起返回,即使我从不想使用该结构。

有解决方法吗?

2 个答案:

答案 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
}

一般来说,通过指针传递大结构会更便宜,因为复制指针比整个结构更容易。