网络错误是常见且不可避免的。在 go 程序中,我需要知道错误是否是由连接断开引起的。例如:
io.EOF
表示连接断开(我不在乎哪一端挂断)——这是一个“连接断开”错误。net.Error.Timeout()
我可以判断错误是否是由读/写超时引起的——这不是“连接中断”错误。但是,如何将以下情况识别为“连接断开”:
connection reset by peer
将它们与其他网络错误区分开来(例如无法解析域名)。
我当然希望不要比较错误字符串。
这是一个糟糕的问题。我的目的是区分:这是外部引起的错误(即网络错误),还是内部引起的错误,即我的代码中的问题。
解决这个问题的正确方法,我认为,是检查错误是否是
net.Error
类型,如果是,检查Temporary()
是否为真。