Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go 即使出现错误,我是否总是必须返回值_Go - Fatal编程技术网

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语句。您仍然将返回一个复杂的结构值,但是您不需要手动初始化它,它将默认为零值。

考虑阅读文章。