compilation error错误是什么原因_Go Web系统中的错误处理(可能是最佳)实践

在讨论所有的错误处理实践之前首先要接受一个事实,那就是每调用一个函数/方法都要检查一下返回值中的err是否为空的操作是无法避免的,这可能是很多从Java转过来的开发者们除语法习惯以外最大的不适应。当然Go里也可以通过panic来模拟抛出"异常"然后中断执行流跳转到错误处理函数的效果,但这显然是政治错误的,原因主要有三:

  • 万一panic没接好,整个程序都是要挂的;
  • panic相对慢很多;
  • 你都用go了,为啥还要把其他语言里的习惯强加到这里呢?入乡随俗吧。

if nil != err达成一致后,剩下的问题就在于判断出有错误之后应该干什么了。

不要直接无脑返回error

这可能是最开始写go的朋友最容易犯的错误了。

if nil != err {
    
        return err
}

这种写法最严重的问题在于出错以后你完全不知道这个错误最初是在哪里产生的,因为错误信息中没有任何可以用于定位的现场信息。为什么很多朋友没有在错误中添加现场信息的习惯呢?其实是被java/python这类语言惯坏了,反正出错以后会自动捕捉保存调用栈信息,谁还会再画蛇添足呢。

不过这种简单粗暴的处理方式也是有适用场景的,那就是当你只是想写一个类似于脚本这种代码短小、功能单一的小程序时,直接返回 error 无可厚非。

使用runtime.Caller()添加代码位置信息

当出现错误时最好的方法就是直接在日志或error对象中携带源代码的文件和行号信息,这样的功能

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值