如何在库中抛出错误

问题描述 投票:0回答:1

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

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

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

go error-handling
1个回答
2
投票

我建议阅读 Go 博客文章 Error Handling and GoEffective Go on error,了解 Go 错误类型的威力。

一般来说,恐慌可以在库/包内使用,但它们不应该传播到包外,除非出现致命错误。换句话说,开发人员永远不必编写期望库出现恐慌的代码。

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

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

此示例改编自标准库的

json
包,其中内部恐慌用于清理复杂的嵌套错误处理。

© www.soinside.com 2019 - 2024. All rights reserved.