1 回答

TA贡献1797条经验 获得超6个赞
您可以检查错误是否与一些已知的错误类型兼容。我是这样做的:
func classifyNetworkError(err error) string {
cause := err
for {
// Unwrap was added in Go 1.13.
// See https://github.com/golang/go/issues/36781
if unwrap, ok := cause.(interface{ Unwrap() error }); ok {
cause = unwrap.Unwrap()
continue
}
break
}
// DNSError.IsNotFound was added in Go 1.13.
// See https://github.com/golang/go/issues/28635
if cause, ok := cause.(*net.DNSError); ok && cause.Err == "no such host" {
return "name not found"
}
if cause, ok := cause.(syscall.Errno); ok {
if cause == 10061 || cause == syscall.ECONNREFUSED {
return "connection refused"
}
}
if cause, ok := cause.(net.Error); ok && cause.Timeout() {
return "timeout"
}
return sprintf("unknown network error: %s", err)
}
- 1 回答
- 0 关注
- 69 浏览
添加回答
举报