Tip #19 除非出于文档说明需要,否则避免使用命名结果

原始链接: Golang Tip #19: Avoid named results unless necessary for documentation.

注意:个人而言,我总是避免使用命名结果,因为它们会鼓励使用裸露返回语句。

命名结果可以在源代码及生成的文档(如godoc、pkgsite(http://pkg.go.dev))中增强代码可读性。

但了解何时使用它们至关重要,以下是一些关键要点:

必要时进行澄清

建议

  • 如果函数返回多个同类型值,使用命名结果。
  • 若其用途不明显,为清晰起见应为其命名。

不要

  • 仅仅为了避免在函数内部声明变量而使用命名结果。
  • 为了避免反复书写“return nil, err”,而倾向于简单地使用“return”。

长函数中避免使用裸露(naked)返回

人们常常对裸露返回持谨慎态度,因为它们可能导致代码可读性降低并影响清晰度。

但在短小的函数中,它们完全是可以接受的:

一眼即可明了其意图,在较长函数中则应避免使用。

为保持代码可读性,与命名结果结合使用时,您有权选择是否使用裸露返回。

对于延迟闭包是必要的

若需在延迟函数调用中修改返回值,为结果参数命名至关重要。

此处为结果参数赋予名称 resulterr 具有特定目的。

这使得这些变量在延迟闭包内可访问,从而根据函数执行结果或针对 panic 进行相应修改。

即使在返回多个结果的情况下,有些情况也不必命名

当函数返回相同类型的对象时,特别是在某一类型的成员方法中,为每个返回的对象命名可能会造成冗余,并使我们的文档显得杂乱。

或者,该类型本身可能已经具有自解释性。 `