可以看到没有对入参进行校验
假設现在有个需求返回的值是太小了还是太大了,返回不同的错误最简单的方法直接改造GetFibonacci
:
如果区分错误类型,依靠字符串去匹配简直呔麻烦还容易出错最常见的解决方法,定义两个预置的错误:
定义不同的错误变量以便于判断错误类型
及早失败,避免嵌套提高代碼可读性
panic
用于不可以恢复的错误
os.Exit
退出时不输出当前调用栈的信息
大家在写c++或者php代码的时候,总有一种习惯不希望这个程序被中断或者退出用来捕获。
最常见的"错误恢复":
就如上常见的“错误恢复”只是记录了一下,这样的恢複方式是非常危险的
一定要当心我们自己 recover
在做的事,因为我们 recover
的时候并不去检测错误到底发生了什么错误而是简单的记录了一下或者忽略。
这时候可能是系统里面的某些核心资源已经消耗完了我们这样把它强制恢复掉,其实系统依然不能够正常地工作的还是导致我們的一些健康检查程序 health check 没有办法检查出当前系统的问题。
因为很多的这种 health check 只是检查当前的系统进程在还是不在因为我们的进程是在的,所以就会导致一种僵尸服务进程它好像活着,但它也不能提供服务
这种情况下个人认为倒不如采用一种可恢复的设计模式其中的一种叫 Let it Crash
,干脆 Crash
掉一旦Crash
掉 守护进程 ,就会帮我们的服务进程重新提起来