Golang的错误处理

Go的错误处理最佳实践

定义不同的错误变量以便于判断错误类型

1
2
var Error00 = errors.New("This is error 00")
var Error01 = errors.New("This is error 01")

及早失败,避免嵌套判断

golang中没有异常机制,很多程序的错误是通过多返回值进行传递的。所以我们尽量要采用判断err!=nil的方式,让程序尽快失败,避免过多的if嵌套,使得程序不可读。

panic和recovery

panic

  • 用于不可恢复的错误
  • 退出前会执行defer指定的内容

panic与os.Exit的差别

  • os.Exit退出时不会调用defer指定的函数
  • os.Exit退出时不会输出调用栈信息

recovery

当程序执行panic的时候,recovery可以执行类似异常中try…catch的机制。

1
2
3
4
5
defer func () {
if err := recovery(); err != nil {
// 执行恢复程序
}
} ()

需要说明的是不要滥用recovery,无脑原则就是:如果你不知道该怎么让程序恢复正常,那就不要使用recovery,让程序崩溃就好,这样可以避免错误被掩盖。

加载评论框需要科学上网