即使出现错误,我是否总是必须返回一个值

如果我有一个看起来像这样的函数

  func ThisIsMyComplexFunc() (ComplexStruct, error)

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

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

  return nil, err

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

有没有解决的办法?


胡说叔叔
浏览 207回答 2
2回答

LEATH

如果您的函数声明为返回两个值,那么您将需要返回两个值。可以简化代码的一种选择是使用命名返回值:func ThisIsMyComplexFunc() (s ComplexStruct, err error) {     ...}现在您可以只分配给s和/或err然后使用一个裸return语句。您仍然会返回一个ComplexStruct值,但您不需要手动初始化它(它会默认为零值)。

森林海

您可以返回指向结构的指针:func ThisIsMyComplexFunc() (*ComplexStruct, error) {  ...  if somethingIsWrong {    return nil, err  }  ...  return &theStructIBuilt, nil}一般来说,无论如何通过指针传递大结构会更便宜,因为复制指针比复制整个结构更容易。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go