我目前正在构建一个小型lib,用于同时读取/写入/移动文件。 在这样做的时候,我遇到了错误处理的问题,这让我想到了:
我应该在lib中引发错误并让用户的整个应用程序崩溃,还是返回错误消息供用户处理?
我想知道哪种情况最适合特定情况以及原因。
答案 0 :(得分:2)
我建议阅读The Go Blog博文Error Handling and Go和Effective Go上的错误,其中介绍了Go错误类型的强大功能。
一般情况下恐慌可以在库/包中使用,但除非存在致命错误,否则它们不应传播到包外。换句话说,开发人员永远不必编写期望恐慌形成您的库的代码。
如果管理错误传播很繁琐,您可以在内部使用恐慌。在这种情况下,您可以使用延迟/恢复处理程序包装您的公共函数,该处理程序传递错误
func Function() (err error) {
defer func() {
if r := recover(); r != nil {
err = r.(error)
}
}()
// Do stuff
panic(errors.New("Error Message"))
}
此示例改编自标准库的json
包,其中内部恐慌用于清除复杂的嵌套错误处理。