Go十大常见错误第5篇:go语言Error管理

本文介绍了Go语言中错误处理的常见错误,包括错误包装与返回、错误类型判断等方面。通过示例代码,讨论了如何正确使用`pkg/errors`包,避免错误被多次处理。同时,文章提到了错误类型判断时的常见误区,并推荐了相关Go错误处理的文章和资源。
摘要由CSDN通过智能技术生成

前言

这是Go十大常见错误系列的第5篇:go语言Error管理。素材来源于Go布道者,现Docker公司资深工程师Teiva Harsanyi[1]

本文涉及的源代码全部开源在:Go十大常见错误源代码[2],欢迎大家关注公众号,及时获取本系列最新更新。

场景

Go语言在错误处理(error handling)机制上经常被诟病。

在Go 1.13版本之前,Go标准库里只有一个用于构建error的errors.New函数,没有其它函数。

pkg/errors包

由于Go标准库里errors包的功能比较少,所以很多人可能用过开源的*pkg/errors*[3]包来处理Go语言里的error。

比较早使用Go语言做开发,并且使用*pkg/errors*[4]包的开发者也会犯一些错误,下文会详细讲到。

pkg/errors包的代码风格很好,遵循了下面的error处理法则。

An error should be handled only once. Logging an error is handling an error. So an error should either be logged or propagated.

翻译成中文就是:

error只应该被处理一次,打印error也是对error的一种处理。所以对于error,要么打印出来,要么就把error返回传递给上一层。

很多开发者在日常开发中,如果某个函数里遇到了error,可能会先打印error,同时把error也返回给上层调用方,这就没有遵循上面的最佳实践。

我们接下来看一个具体的示例,代码逻辑是后台收到了一个RESTful的接口请求,触发了数据库报错。我们想打印如下的堆栈信息:

unable to serve HTTP POST request for customer 1234
 |_ unable to insert customer contract abcd
     |_ unable to commit transaction

假设我们使用pkg/errors包,我们可以使用如下代码来实现:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值