error处理姿势
[TOC]
总结
对于
(value, err)形式的返回,err != nil的时候,value才有意义错误只应该被处理一次。错误要记入日志。
error包需要注意
自己的应用程序中,使用
errors.New或者errors.Errorf返回错误调用其他包内的函数或者是当前项目里的其他函数,直接
return nil即可如果使用的是第三方库或者是go的基础库,这个时候应该使用
github.com/pkg/errors包的Wrap或者Warpf保存堆栈信息,同时添加自定义的上下文信息。直接返回错误,在程序工作入口使用
%+v记录堆栈详情。使用
errors包的Unwrap方法获取根因错误来和自定义错误进行等值判断。或者使用Is函数将错误与值进行比较;使用As测试错误是否为特定类型一旦错误被处理,包括你打印日志,或者降级处理等,这个时候你就不应该再向上抛出err,而应该return nil。
使用Is和As检查错误
Go 1.13的errors包中包括了两个用于检查错误的新函数:Is和As。
Is函数将错误与值进行比较。
// Similar to:
// if err == ErrNotFound { … }
if errors.Is(err, ErrNotFound) {
// something wasn't found
}As函数用于测试错误是否为特定类型。
参考
最后更新于
这有帮助吗?