关于使用第三方库错误(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可以封装在接口里

要回复问题请先登录注册