为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
胡说叔叔 2021-07-09 18:08:15
如果我有一个看起来像这样的函数  func ThisIsMyComplexFunc() (ComplexStruct, error)其中 ComplexStruct 是一个大结构,通常包含大量值。如果函数一开始就偶然发现错误,甚至在我开始构建结构之前,理想情况下我只想返回错误,例如  return nil, err但它不会让我这样做,它迫使我创建一个虚拟的复杂结构并将其与错误一起返回,即使我从不想使用该结构。有没有解决的办法?
查看完整描述

2 回答

?
LEATH

TA贡献1936条经验 获得超6个赞

如果您的函数声明为返回两个值,那么您将需要返回两个值。

可以简化代码的一种选择是使用命名返回值:

func ThisIsMyComplexFunc() (s ComplexStruct, err error) {
    ...}

现在您可以只分配给s和/或err然后使用一个裸return语句。您仍然会返回一个ComplexStruct值,但您不需要手动初始化它(它会默认为零值)。


查看完整回答
反对 回复 2021-07-12
?
森林海

TA贡献2011条经验 获得超2个赞

您可以返回指向结构的指针:


func ThisIsMyComplexFunc() (*ComplexStruct, error) {

  ...

  if somethingIsWrong {

    return nil, err

  }

  ...

  return &theStructIBuilt, nil

}

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


查看完整回答
反对 回复 2021-07-12
  • 2 回答
  • 0 关注
  • 206 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信