对于调用三方库获取的报错,一般将额外信息(比如调用参数,上下文信息等方便定位问题的信息)包装之后向上层调用方直接抛出:if _,err:=ioutil.ReadAll(r);err!=nil{return fmt.Errorf("read file failed:%w", err)}// 调用方if err!=nil{if errors.Is(err, io.EOF){...}}关于错误日志的处理部分,为了防止处处打日志造成的上下文信息分散和大量信息冗余,一般建议的处理方式是对于内部方法的调用,使用%w包装错误和必要的额外信息,直接返回到上层;对于最外层方法(一般是http handler或者rpc handler),将错误包装上下文,打印到错误日志中,再使用errors.Is或者errors.As方法,根据错误类型进行不同的错误处理逻辑 。这样的好处是,对于全局而言,有且只有最外层一份错误日志,而这个错误信息时包装了层层调用信息的,内容最为齐全 。
推荐阅读
-
-
-
笑小新科技 2K超级屏+150倍变焦+骁龙875,芳香四溢,小米11pro曝光
-
-
-
中关村在线会议室投影机仍然槽点满满?明基E592满分一战
-
-
-
-
-
-
科技|蚂蚁发布招股说明书,去年收入1206亿,上市后要做这三件事
-
-
-
Windows操作系统|Win11最新预览版推送!新特性和已知问题一览
-
「剑与远征」《剑与远征》删除带有罗志祥信息,玩家说删除是小,补偿如何计算
-
-
易烊千玺|易烊千玺俨然已经成为“00后”小生梯队中的领军人物
-
行业互联网|瑞信CEO他都不要!因与雷军相识多年,宁当小米“账房先生”
-
萧山|家有4套房,存款300万,我不想上进,有错吗?