Go语言web开发中的panic和error
2019-01-03 本文已影响2人
AlberLiu
现在web开发中,一般对error的处理方法是:
if err!=nil{
log.Error(err)
return err
}
目前我们项目中也是这样做的,于是,代码中充满了大量这样的代码,这是比较痛苦的。
先分析error的来源
1.调用第三方返回的,比如mysql驱动
2.我们自己定义的业务错误,比如用户购买某件商品,发现用户没有足够的余额支付,我们要返回一个错误码,告知用户
再看看官方的panic和error使用场景
panic:适用于不可恢复的错误
error:适用于可恢复的错误场景
可恢复的意思就是,用户发现返回这样的错误,需要对这个错误进行一些逻辑的处理。
我们再看看我们的系统中的错误
1.调用第三方返回的错误,比如调用mysql,目前,在我们的项目中,我只遇见一种错误需要进行一些逻辑处理,就是查询数据时返回的“no rows found”,其余的都不需要,会直接将错误返回给客户端。
2.自己定义的业务错误,这些一般直接返回客户端的
所以,我推荐的做法是,将数据库error以及业务error,除了“no rows found”,全部用panic封装,在请求刚开始的进行recover,这样就可以少些很多错误判断的代码,虽然这用方式不推荐,但是,真的可以使代码简洁很多。