我有以下代码向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中的错误类型?
答案 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实现的示例。