序
无论什么语言,处理错误都不是一件难的事,但是想把每个错误处理写好符合规范并不是容易的事。我只是对我在编程过程中对处理错误的一些思考和教训,肯定不是全对的,如果你觉得我是错的或者你有更好的方法,请不吝指教。
一.请不要忽略任何错误
在任何时候我们都不应该忽略错误,大部分的错误都需要捕捉处理,除非一些不重要能容忍的错误可以打印出来,但一定不能忽略,不然会给维护带来非常大的困难
二.错误需要一个字典
无论你是使用错误码还是异常捕捉错误,都需要将错误进行分类,比如50x是属于服务端错误,40x属于客户端错误
三.不要将大量的代码写在一个try catch里面
我们希望一个try catch只完成一件事情
四.更不推荐在循环体内处理错误
可以将循环体放在try语句内,然后在外面做catch
五.尽可能在错误发生的地方处理错误
这样可以使调用者更简单,如果你写过go,就知道if err != nil的尴尬
六.异常是用来处理不期望发生的事,而错误码是处理可能发生的事
所以不要用处理错误逻辑的方式来处理业务逻辑,类似if(参数不合法){}就可以做的很好了
七.对一个地方不停的报错,不要一直打印
这样日志文件太大,也会淹没其它的错误,打印错误以及发生的次数即可
八.区分错误的等级
笼统的错误只会让人手足无措,比如fatal表示重大错误,error表示资源或需求得不到满足,waring并不一定是个错误但需要引起注意,info表示不是错误只是一个信息,而debug是在开发阶段打印的信息他不应该出现在生产环境
九.为你的错误定义提供清楚的文档以及每种错误的代码示例
如题,没有什么好说的,我们应该展示给别人接口对于错误的处理
十.处理错误时,总是要清理已分配的资源
例如关闭流,finally和defer都可以很好的处理
十一.错误日志的输出最好使用错误码,而不是错误信息
这样可以让日志分析软件很容易的做自动化监控,而不是从错误信息中做语义分析