Go 1.13 发布后对 errors 包有进一步的改善,其中errors.Is可以很方便的进行异常的判断。

以前的“气功波”式的判断方法

func handleErr(err error) {
    if err == nil {
        return
    }   

    if uerr, ok := err.(*url.Error); ok {
        if noerr, ok := uerr.Err.(*net.OpError); ok {
            if scerr, ok := noerr.Err.(*os.SyscallError); ok {
                if scerr.Err == syscall.ECONNREFUSED {
                    // 终于确认是这个错误了
                    fmt.Printf("gurl: (7) couldn't connect to host\n")
                    return
                }
            }
        }
    }   

    fmt.Printf("%s\n", err)
}

新版本的判断方法

func newHandleErr(err error) {
    // 短小精悍啊
    if errors.Is(err, syscall.ECONNREFUSED) {
        fmt.Printf("gurl: (7) couldn't connect to host\n")
        return
    }   
}
最后修改:2019 年 12 月 15 日 11 : 20 AM