创建专用函数是处理错误的好方法

Is creating a dedicated function a nice way to handle errors

我最近看了 this talk by Liz Rice(我强烈推荐!),我看到了而不是写:

func main() {
    if err := someFunc(); err != nil {
        panic(err)
    }
}

她确实:

func main() {
    must(someFunc())
}

func must(err error) {
    panic(err)
}

这是处理错误的惯用方式吗? IMO 它没有提高可读性,我觉得它没有遵循 Go proverb “清晰胜于聪明”。你怎么看?

MustXXX(error) 模式在 error 可能 出现在 运行 时很有用,但它是否出现实际上是 编译时决定。这意味着如果源代码是它应该的样子,错误将不会在 运行 时间发生。

光辉的例子是template.Must() and regexp.MustCompile()。如果您在源代码中提供了有效的模板或有效的正则表达式,解析它们将永远不会在 运行 时失败。在这些情况下,使用 Must() 会导致代码更短更清晰。应提供测试以检测源中是否使用了无效模板或正则表达式,以便尽早检测到错误(当测试为 运行)时。

除此之外(当基于 运行 用户输入、从外部源读取的数据等时间条件可能发生错误时),显然不建议使用 Must() 模式,您应该正确处理错误。

查看相关: