go - 如何在库中抛出错误

标签 go error-handling lib

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

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

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

最佳答案

我建议阅读 The Go 博客文章 Error Handling and GoEffective Go关于错误,看看 Go 错误类型的强大功能。

一般来说, panic 可以在库/包内使用,但除非出现 fatal error ,否则它们不应传播到包外。换句话说,开发人员永远不必编写期望您的库出现 panic 的代码。

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

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

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

关于go - 如何在库中抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44377454/

相关文章:

types - Golang 底层类型

mongodb - mgo - 查询性能似乎一直很慢(500-650 毫秒)

c# - 使用C#从Formstack获取提交的数据?

sql-server - 在分布式事务中检查约束绕过CATCH block

git - Git-错误: RPC failed; curl 56 The requested URL returned error: 401: The remote end hung up unexpectedly

node.js - 错误 : libnode. so.64:无法打开共享对象文件:没有这样的文件或目录 - Docker 容器

c++ - 使用 XLNT excel 库时遇到问题

go - 使用缓冲 IO 与使用 Goroutine 写入文件

go - 是否有等同于 os.Args() 的函数?

c - CGO对“TIFFGetField”的 undefined reference