关于使用第三方库错误(error)的判断

在使用第三方库的时候,有时里面返回一些错误,我们需要根据错误类型的不同进行不同的处理, 请问大家一些是怎么优雅的处理?

比如,第三方库的代码是这样返回的:

func ThirdPartFun( somecase string ) error {

    switch somecase {
        case "timeout":
            return errors.New("timeout")
        case "connet close":
            return errors.New("connet close")
        default:
            return nil      

    }

}

如果我的程序拿到这个返回码,怎么做比较合适,想知道大家的做法

  err := ThirdPartFun("")
  if err != nil {
    if 超时/断开连接 { //这里怎么写比较合理,对应该上面两个error,是否只能是判断字符串?
       do_reconnet()
    }esle {
       return err
    }

  }
已邀请:

stevewang

赞同来自: steven voidint

第三方库应该提供错误分类的方法,这是库实现者的责任。 一般的方法是通过接口查询来获取错误的实现类型,或者是与定义好的变量如ErrTimeout进行比较。

参考net库的错误分类处理:

func Read(conn *net.TCPConn, b []byte) (int, error) {
    for {
        n, err := conn.Read(b)
        if err != nil {
            opErr, ok := err.(*net.OpError)
            if ok && opErr.Temporary() {
                // 暂时的错误,重试
                continue
            }
            return n, err
        }
        return n, nil
    }
}

willee

赞同来自:

如上,好一点的第三方库,error可以封装在接口里

要回复问题请先登录注册