Go优雅的错误处理: 支持错误堆栈, 错误码, 错误链的工具库

这篇具有很好参考价值的文章主要介绍了Go优雅的错误处理: 支持错误堆栈, 错误码, 错误链的工具库。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

地址: https://github.com/morrisxyang/errors
如果觉得有用欢迎 Star 和 PR, 有问题请直接提issue

errors





简单的支持错误堆栈, 错误码, 错误链的工具库:

  • 支持携带堆栈, 嵌套构造错误链

  • 支持携带错误码, 方便接口返回

  • 支持自定义堆栈打印深度和错误链打印格式

  • 使用 CallersFrames 替代 FuncForPC 生成堆栈, 避免特殊情况line number错误等问题, 详见runtime: strongly encourage using CallersFrames over FuncForPC with Callers result

  • 简化堆栈信息, 一条链路多次Wrap操作只保留最深层堆栈, 只打印一次

安装和文档

安装使用 go get github.com/morrisxyang/errors

文档地址是 https://pkg.go.dev/github.com/morrisxyang/errors

快速开始

构造错误链

func a() error {
   err := b()
   err = Wrap(err, "a failed reason")
   return err
}

func b() error {
   err := c()
   err = Wrap(err, "b failed reason")
   return err
}

func c() error {
   _, err := os.Open("test")
   if err != nil {
      return WrapWithCode(err, 123, "c failed reason")
   }
   return nil
}

打印错误信息, %+v会打印堆栈, %v只打印错误信息

a failed reason
Caused by: b failed reason
Caused by: 123, c failed reason
Caused by: open test: no such file or directory
github.com/morrisxyang/errors.c
   /Users/morrisyang/Nutstore Files/go-proj/githuberrors/errors_test.go:94
github.com/morrisxyang/errors.b
   /Users/morrisyang/Nutstore Files/go-proj/githuberrors/errors_test.go:86
github.com/morrisxyang/errors.a
   /Users/morrisyang/Nutstore Files/go-proj/githuberrors/errors_test.go:80
....堆栈信息省略

核心方法

错误封装

  • func New(msg string) error
  • func Newf(format string, args ...interface{}) error
  • func NewWithCode(code int, msg string) error
  • func NewWithCodef(code int, format string, args ...interface{}) error
  • func Wrap(e error, msg string) error
  • func Wrapf(e error, format string, args ...interface{}) error
  • func WrapWithCode(e error, code int, msg string) error
  • func WrapWithCodef(e error, code int, format string, args ...interface{}) error

错误解析

  • func Code(e error) int
  • func EffectiveCode(e error) int
  • func Msg(e error) string
  • func As(err error, target interface{}) bool
  • func Is(err, target error) bool
  • func Cause(e error) error
  • func Unwrap(err error) error

配置

  • type Config

    • func GetCfg() *Config
  • func ResetCfg()

  • func SetCfg(c *Config)

FAQ

  1. 多次 Wrap 错误会携带多次堆栈吗?

    可在调用链路上多次Wrap, 添加说明信息, 但只有最深层的Wrap操作会设置堆栈, 继续 Wrap, return err 等操作不会影响堆栈信息

  2. 在链路中某个错误设置了合适的错误码, 然后继续Wrap时没有设置, 如何获取?

    建议在合适的清晰的时机设置有效的错误码, 可以使用EffectiveCode获取链路中外层第一个有效的非0错误码, 由于系统调用等情况, 同一链路中可能有多个错误携带错误码, 此时默认外层的错误码应该对外暴露, 屏蔽了内层的详细信息.文章来源地址https://www.toymoban.com/news/detail-540440.html

到了这里,关于Go优雅的错误处理: 支持错误堆栈, 错误码, 错误链的工具库的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 一站式统一返回值封装、异常处理、异常错误码解决方案—最强的Sping Boot接口优雅响应处理器

    作者:京东物流 覃玉杰 Graceful Response是一个Spring Boot体系下的优雅响应处理器,提供一站式统一返回值封装、异常处理、异常错误码等功能。 使用Graceful Response进行web接口开发不仅可以节省大量的时间,还可以提高代码质量,使代码逻辑更清晰。 强烈推荐你花3分钟学会它!

    2024年02月03日
    浏览(45)
  • 13 Go的错误处理

    概述         在上一节的内容中,我们介绍了Go的接口,包括:定义接口、实现接口、使用接口、空接口等。在本节中,我们将介绍Go的错误处理。在Go语言中,错误处理是一种重要的编程模式,它用于处理可能出现的错误或异常情况。Go语言采用了一种简洁而直接的错误处

    2024年02月05日
    浏览(23)
  • Go语言进阶:函数、指针、错误处理

    函数是基本的代码块,用于执行一个任务。 Go 语言最少有个 main() 函数。 你可以通过函数来划分不同功能,逻辑上每个函数执行的是指定的任务。 函数声明包括函数名﹑形式参数列表﹑返回值列表(可省略)以及函数体。 形式参数列表描逑了函数的参数名以及参数类型。这

    2024年02月12日
    浏览(28)
  • Go错误处理的几种方式

    Go 的 error 有两个很重要的特性: error 就是一个普通的值,处理起来没有额外的开销 error 的扩展性很不错,可以按照不同的场景来自定义错误 在 Go1.13 之后,在 errors 包中提供了一些函数,让错误的处理和追踪更加方便一些。 这篇文章会结合 errors 中的函数,来讨论一下 Go 中

    2024年02月12日
    浏览(31)
  • 【go语言】2.3.1 错误处理的基本概念

    在 Go 语言中,错误处理是通过返回错误值进行的,而不是像一些其他语言那样通过抛出和捕获异常。Go 语言有一个内置的接口类型  error ,专门用于处理错误。 error  是一个内置的接口,定义如下: 任何实现了  Error() string  方法的类型都可以被视为一个  error  类型。这个

    2024年02月15日
    浏览(40)
  • Go语言打印堆栈errors包

    因为Go语言提供的错误太简单了,以至于简单的我们无法更好的处理问题,甚至不能为我们处理错误,提供更有 用的信息,所以诞生了很多对错误处理的库, github.com/pkg/errors 是比较简洁的一样,并且功能非常强大, 受到了大量开发者的欢迎,使用者很多。 跟踪堆栈信息的函

    2024年02月12日
    浏览(35)
  • 100天精通Golang(基础入门篇)——第23天:错误处理的艺术: Go语言实战指南

    🌷🍁 博主猫头虎🐅🐾 带您进入 Golang 语言的新世界✨✨🍁 🦄 博客首页 ——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文并茂🦖生动形象🐅简单易学!欢迎大家来踩踩~🌺 🌊 《IDEA开发秘籍专栏》 🐾 学会IDEA常用操作,工作效率翻倍~💐 🌊 《100天精通

    2024年02月07日
    浏览(53)
  • GO语言凭什么是区块链的首选语言

    区块链的火热也带动了GO语言开发者的突增,那凭什么GO语言会成为最主要的区块链构建语言之一。我认为这得益于GO语言的性能、抽象度、简单性和现代性。并且,当下最成功、最流行的go-ethereum和Fabric都是使用GO语言实现的,在这两个的带领下,为了减少开发时间和成本,

    2024年01月15日
    浏览(28)
  • x-cmd pkg | fx - Warp 支持的 JSON 查看和处理工具

    fx 是一款由专为 JSON 定制的双用途命令行工具,提供基于终端的 JSON 查看器和 JSON 处理实用程序。虽然 JSON 查看器是用 Go 编写的,并且无需外部依赖即可运行,但 JSON 处理工具是用 JS 开发的,与 Node.js 和 Deno 兼容。 使用 x env use fx 即可自动下载并使用 在终端运行 eval \\\"$(cur

    2024年01月20日
    浏览(37)
  • jstack(Stack Trace for Java)Java堆栈跟踪工具

    jstack(Stack Trace for Java)命令用于生成虚拟机当前时刻的线程快照(一般称为 threaddump 或者 javacore文件 )。 线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的目的通常是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源

    2024年02月12日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包