Golang检测"no such host"错误的惯用方法

3

我正在使用这个,但感觉不太对:

if err, ok := err.(net.Error); ok {
    var message string
    if err.Timeout() {
        message = "Timeout"
    } else if strings.HasSuffix(err.Error(), "no such host") {
        message = "No such host"
    }
}

有更通俗易懂的方法吗?
2个回答

4

截至Go 1.13版本: 您可以使用errors.Aserrors.Is

var dnsError *net.DNSError
if errors.As(err, &dnsError) {
    fmt.Println("DNS Error", dnsError)
}

翻译后的答案:

您可以使用此代码检查 DNS 错误。例如,如果err是我们的错误:

if err, ok := err.(*url.Error); ok {
    if err, ok := err.Err.(*net.OpError); ok {
        if _, ok := err.Err.(*net.DNSError); ok {
            retry(r)
        }
    }
}

3

我认为你可以使用DNSError类型代替普通的Error

err, ok := err.(net.DNSError)

1
需要使用err.(*net.DNSError)。DNSError类型总是通过地址返回(当将对象存储在接口中时,通常应该这样做),因此类型断言err.(net.DNSError)将始终失败。 - Kaedys
你是怎么想到的?这个过程是什么? - Riley Guerin
1
@RileyGuerin 这可能会有所帮助 fmt.Println(reflect.TypeOf(err)) - darxtrix

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接