Golang的错误处理
Go的错误处理最佳实践
定义不同的错误变量以便于判断错误类型
1 | var Error00 = errors.New("This is error 00") |
及早失败,避免嵌套判断
golang中没有异常机制,很多程序的错误是通过多返回值进行传递的。所以我们尽量要采用判断err!=nil的方式,让程序尽快失败,避免过多的if嵌套,使得程序不可读。
panic和recovery
panic
- 用于不可恢复的错误
- 退出前会执行defer指定的内容
panic与os.Exit的差别
- os.Exit退出时不会调用defer指定的函数
- os.Exit退出时不会输出调用栈信息
recovery
当程序执行panic的时候,recovery可以执行类似异常中try…catch的机制。
1 | defer func () { |
需要说明的是不要滥用recovery,无脑原则就是:如果你不知道该怎么让程序恢复正常,那就不要使用recovery,让程序崩溃就好,这样可以避免错误被掩盖。