gpt4 book ai didi

go - 如何解决 `catch` 特定错误

转载 作者:IT王子 更新时间:2023-10-29 01:09:06 25 4
gpt4 key购买 nike

例如,我使用一个 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 导出的各种错误类型包裹:AddrError , DNSConfigError , DNSError , Error

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

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

What's more, how to get all the errors a specific standard library function may return?

唯一简单的方法是阅读库的源代码。在走向那个极端之前,第一步就是简单地阅读 godoc,就像 net 包的情况一样,错误被很好地记录下来。

关于go - 如何解决 `catch` 特定错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43605790/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com