登录
首页 >  Golang >  Go问答

如何“捕捉”特定错误

来源:Golang技术栈

时间:2023-04-13 07:51:15 188浏览 收藏

大家好,我们又见面了啊~本文《如何“捕捉”特定错误》的内容中将会涉及到golang等等。如果你正在学习Golang相关知识,欢迎关注我,以后会给大家带来更多Golang相关文章,希望我们能一起进步!下面就开始本文的正式内容~

问题内容

例如,我将一个 Go 标准库函数用作:

func Dial(network, address string) (*Client, error)

这个函数可能会返回错误,我只关心报告“连接丢失”或“连接被拒绝”的错误,然后编写一些代码来修复这些错误。
这好像是:

client, err := rpc.Dial("tcp", ":1234")  
if err == KindOf(ConnectionRefused) {
  // do something
}

更重要的是,如何获取特定标准库函数可能返回的所有错误?

正确答案

没有标准的方法可以做到这一点。

最明显的方法(只有在没有其他方法可用时才应该使用)是将错误字符串与您期望的字符串进行比较:

if err.Error() == "connection lost" { ... }

或者在某些情况下可能更健壮:

if strings.HasSuffix(err.Error(), ": connection lost") { ... }

但是许多库会返回特定的错误类型,这使得这变得更加容易。

在您的情况下,相关的是net包导出的各种错误类型:AddrErrorDNSConfigErrorDNSErrorError等。

您可能最关心net.Error,它用于网络错误。所以你可以这样检查:

if _, ok := err.(net.Error); ok {
    // You know it's a net.Error instance
    if err.Error() == "connection lost" { ... }
}

更重要的是,如何获取特定标准库函数可能返回的所有错误?

做到这一点的唯一万无一失的方法是阅读库的源代码。在走到那个极端之前,第一步是简单地阅读 godoc,就像net包的情况一样,错误记录得很好。

好了,本文到此结束,带大家了解了《如何“捕捉”特定错误》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>