创建专用函数是处理错误的好方法
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()
模式,您应该正确处理错误。
查看相关:
我最近看了 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()
模式,您应该正确处理错误。
查看相关: