我目前正在构建一个小库,用于同时读取/写入/移动文件。在这样做时,我遇到了错误处理的问题,这让我想到:
我应该在 lib 中抛出错误并让用户的整个应用程序崩溃,还是返回错误消息供用户处理?
我想知道哪个最适合给定情况以及为什么。
我目前正在构建一个小库,用于同时读取/写入/移动文件。在这样做时,我遇到了错误处理的问题,这让我想到:
我应该在 lib 中抛出错误并让用户的整个应用程序崩溃,还是返回错误消息供用户处理?
我想知道哪个最适合给定情况以及为什么。
我建议阅读 Go 博客文章错误处理和 Go和Effective Go on errors,看看 Go 的错误类型的力量。
一般来说,恐慌可以在库/包中使用,但除非出现致命错误,否则它们不应传播到包之外。换句话说,开发人员永远不必编写期望库中出现恐慌的代码。
如果管理错误的传播很乏味,您可以在内部使用恐慌。在这种情况下,您可以使用传递错误的延迟/恢复处理程序包装您的公共函数
func Function() (err error) {
defer func() {
if r := recover(); r != nil {
err = r.(error)
}
}()
// Do stuff
panic(errors.New("Error Message"))
}
此示例改编自json
标准库的包,其中内部恐慌用于清理复杂的嵌套错误处理。