作为go1.6的,从超时所有错误应符合
net.Error与
Timeout()正确设置。您需要检查的只是:
if err, ok := err.(net.Error); ok && err.Timeout() {在旧版本中,通过http包检查超时更为困难。
*net.OpError
如果您在基础连接上设置了“截止日期”,则可以使用Timeout()获得一个。- 您可以获得一个
tlsHandshakeTimeoutError
(显然不会导出)实现该net.Error
接口的文件。 url.Error
如果url包内有问题(初始连接期间超时),则可以获取,- 如果您用
http.Client.Timeout
[go1.3 +](调用Transport.CancelRequest
)设置了超时设置,则可能会出现“使用封闭的网络连接”错误。从go1.5开始,将正确设置Timeout属性。
您可以
net.Error使用类型开关检查a :
switch err := err.(type) {case net.Error: if err.Timeout() { fmt.Println("This was a net.Error with a Timeout") }case *url.Error: fmt.Println("This is a *url.Error") if err, ok := err.Err.(net.Error); ok && err.Timeout() { fmt.Println("and it was because of a timeout") }}当go <1.5时,您将需要检查错误字符串是否
http.Client超时:
if err != nil && strings.Contains(err.Error(), "use of closed network connection") { fmt.Println("Could be from a Transport.CancelRequest")}


