前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Go错误处理库比较:pkg/errors vs github.com/pkg/errors

Go错误处理库比较:pkg/errors vs github.com/pkg/errors

作者头像
运维开发王义杰
发布2023-08-10 17:44:40
5160
发布2023-08-10 17:44:40
举报

在Go语言中,错误处理是非常重要的一环。为了提供更加丰富的错误处理能力,Go社区发展出了许多优秀的第三方库。今天我们来比较一下两个常见的错误处理库:pkg/errorsgithub.com/pkg/errors,以帮助大家更好地理解它们的差别,并做出适合自己项目的选择。

pkg/errors

pkg/errors是从Go 1.13版本开始,标准库errors增加的一部分。它的主要功能是提供了一种新的错误处理模式,即AsIsUnwrap

  • errors.As:检查错误的链是否有匹配的错误类型。
  • errors.Is:检查错误链中是否存在特定的错误。
  • errors.Unwrap:返回错误中的下一个错误。

它也引入了fmt.Errorf%w占位符,这个占位符可以创建一个包装了原始错误的新错误。这种错误可以被Unwrap函数解包。

代码语言:javascript
复制
err := fmt.Errorf("an error occurred: %w", originalError)

github.com/pkg/errors

github.com/pkg/errors是在Go 1.13版本之前,用于扩展Go错误处理能力的一个第三方库。它的功能比标准库的pkg/errors更加丰富。最重要的一点是,github.com/pkg/errors可以保存和打印错误发生时的堆栈信息。

代码语言:javascript
复制
err := errors.Wrap(originalError, "an error occurred")
fmt.Printf("%+v", err) // 打印错误和堆栈信息

此外,github.com/pkg/errors也提供了Cause函数,这个函数和标准库的Unwrap函数类似,可以获取到被包装的原始错误。

选择建议

如果你的项目使用的Go版本在1.13及以上,那么你可以优先选择标准库的pkg/errors,因为它是标准库的一部分,无需引入额外的依赖,并且它和新的Go错误处理惯例相兼容。

但是,如果你需要保存和打印错误的堆栈信息,那么你应该选择github.com/pkg/errors。需要注意的是,github.com/pkg/errorsWrap函数和标准库的fmt.Errorf%w占位符有一些不同。如果你在用github.com/pkg/errors的代码中混用了fmt.Errorf%w,那么你需要使用errors.Unwraperrors.Iserrors.As来获取原始错误,而不能使用github.com/pkg/errorsCause函数。

最后,你应该避免在同一个项目中混用这两个库,以避免混乱。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-07-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维开发王义杰 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 在Go语言中,错误处理是非常重要的一环。为了提供更加丰富的错误处理能力,Go社区发展出了许多优秀的第三方库。今天我们来比较一下两个常见的错误处理库:pkg/errors和github.com/pkg/errors,以帮助大家更好地理解它们的差别,并做出适合自己项目的选择。
    • pkg/errors
      • github.com/pkg/errors
        • 选择建议
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档