如何在Go中检查错误是否是握手超时

时间:2017-08-21 09:11:20

标签: http go

我有以下代码向URL发出请求并检查错误。

import "net/http"

response, err := http.Head("url")

如何检查错误是否是由于握手超时造成的?我尝试了以下方法:

if err != nil {
    tlsError, ok := err.(http.tlsHandshakeTimeoutError)
    if ok {
        // handle the error
    }
}

但我无法访问http.tlsHandshakeTimeoutError类型,因为它未被导出。我怎样才能检查go中的错误类型?

1 个答案:

答案 0 :(得分:2)

tlsHandshakeTimeoutError - 未导出且是唯一的 检查此错误的可能性是:

import "net/url"

// ....

if urlError,ok :=  err.(*url.Error)  ; ok {
    if urlError.Error() == "net/http: TLS handshake timeout" {
        // handle the error
    }
}

这是打开的门票,讨论它:

https://github.com/golang/go/issues/15935

顺便说一句http错误(以及tlsHandshakeTimeoutError也提供):

type WithTimeout interface {
   Timeout() bool
}

您可以使用它来检查您是否不喜欢字符串比较。 Here是来自http2包的isTemporary实现的示例。