如何在lib中抛出错误

时间:2017-06-05 20:49:13

标签: go error-handling lib

我目前正在构建一个小型lib,用于同时读取/写入/移动文件。 在这样做的时候,我遇到了错误处理的问题,这让我想到了:

我应该在lib中引发错误并让用户的整个应用程序崩溃,还是返回错误消息供用户处理?

我想知道哪种情况最适合特定情况以及原因。

1 个答案:

答案 0 :(得分:2)

我建议阅读The Go Blog博文Error Handling and GoEffective Go上的错误,其中介绍了Go错误类型的强大功能。

一般情况下恐慌可以在库/包中使用,但除非存在致命错误,否则它们不应传播到包外。换句话说,开发人员永远不必编写期望恐慌形成您的库的代码。

如果管理错误传播很繁琐,您可以在内部使用恐慌。在这种情况下,您可以使用延迟/恢复处理程序包装您的公共函数,该处理程序传递错误

func Function() (err error) {
    defer func() {
        if r := recover(); r != nil {
            err = r.(error)
        }
    }()
    // Do stuff
    panic(errors.New("Error Message"))
}

此示例改编自标准库的json包,其中内部恐慌用于清除复杂的嵌套错误处理。