地址: 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
....堆栈信息省略

核心方法

错误封装

错误解析

配置

FAQ

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

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

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

    建议在合适的清晰的时机设置有效的错误码, 可以使用EffectiveCode获取链路中外层第一个有效的非0错误码, 由于系统调用等情况, 同一链路中可能有多个错误携带错误码, 此时默认外层的错误码应该对外暴露, 屏蔽了内层的详细信息.

Go优雅的错误处理: 支持错误堆栈, 错误码, 错误链的工具库的更多相关文章

  1. Spring Boot 如何自定义返回错误码错误信息

    说明 在实际的开发过程中,很多时候要定义符合自己业务的错误码和错误信息,而不是统一的而不是统一的下面这种格式返回到调用端 INTERNAL_SERVER_ERROR(500, "Intern ...

  2. shareSDK微博分享出现: 分享失败: 错误描述:Insufficient app permissions! 错误码:10014

    这个错误是由于appKey所在账号没有微博高级写入接口权限, 需要申请, 详见: http://www.mamicode.com/info-detail-936938.html

  3. 用户态使用 glibc/backtrace 追踪函数调用堆栈定位段错误【转】

    转自:https://blog.csdn.net/gatieme/article/details/84189280 版权声明:本文为博主原创文章 && 转载请著名出处 @ http:/ ...

  4. HTTP请求415错误 – 不支持的媒体类型(Unsupported media type)

    HTTP请求415错误 – 不支持的媒体类型(Unsupported media type) 通常有以下情况: 1:检查你的 http 请求头信息,比如 因为 User-Agent 被服务器设置 拒绝 ...

  5. ASP.NET Core应用的错误处理[1]:三种呈现错误页面的方式

    由于ASP.NET Core应用是一个同时处理多个请求的服务器应用,所以在处理某个请求过程中抛出的异常并不会导致整个应用的终止.出于安全方面的考量,为了避免敏感信息的外泄,客户端在默认的情况下并不会得 ...

  6. IIS HTTP 错误 500.19 - Internal Server Error HTTP 错误 401.3 - Unauthorized 解决办法

    前言:IIS是一个强大的服务器管理器,当遇到 IIS HTTP 错误 500.19 - Internal Server Error  HTTP 错误 401.3 - Unauthorized 的解决办 ...

  7. 【WCF】错误处理(二):错误码―—FaultCode

    先来说说SOAP消息中错误消息的包装结构,一条SOAP错误消息的大致形式如下: <s:Fault> <faultcode xmlns:a="me-cust-error&qu ...

  8. Unity打安卓包 Android 所有错误解决方案大全(几乎囊括所有打包错误 )

    Unity打包出错解决方案 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享. ...

  9. 【小程序】微信小程序iOS苹果报错“协议错误”

    遇到问题 目前正在开发一个小程序,然后苹果真机测试时发现无法授权并提示,errMsg:"request:fail 未能完成该操作.协议错误" 开发环境下测试没问题,安卓机真机测试没 ...

  10. 黄聪:微信支付错误两个问题的解决:curl出错,错误码:60

    如下是运行微信支付测试代码时出错代码: Warning: curl_setopt() expects parameter 2 to be long, string given in D:\wwwroo ...

随机推荐

  1. 随手记:redis 开发注意事项

    Redis开发建议 1.冷热数据分离,不要将所有数据全部都放到Redis中 虽然Redis支持持久化,但是Redis的数据存储全部都是在内存中的,成本昂贵.建议根据业务只将高频热数据存储到Redis中 ...

  2. PHP__采集类__Snoopy

    Snoopy                                                  目录 了解Snoopy.1 功能:...1 下载Snoopy:...2 Snoopy常用 ...

  3. Redis(八)redis新功能

    redis6新功能 1 ACL Redis ACL是AccessControlList(访问控制表)的缩写,该功能允许根据可以执行的命令和访问的键来限制某些连接. 2 基本命令 acl help &g ...

  4. Qt5.9 UI设计(七)——统一样式设计

    前言 前面已经将UI设计部分实现,各页面也做了最简单的设计,本章介绍一下qss样式的使用.样式设计最终的显示效果如下图: 操作步骤 将stylesheet.qss 样式文件添加进工程 styleshe ...

  5. SPI-SPI主机硬件片选功能使用说明

    SPI主机硬件片选功能使用说明 SPI协议最早的标准,是由摩托罗拉公司制定.在协议使用的过程中,根据实际需求可能会进行一些扩展和修改. 在一份由飞思卡尔半导体发布的SPI V4.01版本规范中,对片选 ...

  6. 解密Elasticsearch:深入探究这款搜索和分析引擎

    作者:京东保险 管顺利 开篇 最近使用Elasticsearch实现画像系统,实现的dmp的数据中台能力.同时调研了竞品的架构选型.以及重温了redis原理等.特此做一次es的总结和回顾.网上没看到有 ...

  7. Prism Sample 5 View Injection

    这里稍微复杂了点,定义视图A的过程是一样的: <UserControl x:Class="ViewInjection.Views.ViewA" xmlns="htt ...

  8. 【Docker】Harbor 分布式仓库管理

    一.Harbor 介绍 Harbor 是 VMware 公司开源的企业级 Docker Registry 项目,其目标是帮助用户迅速搭建一个企业级的 Docker Registry (私有仓库)服务. ...

  9. 2015年5月最新win7纯净版系统(32位)补丁最新

    下载地址: http://yunpan.cn/cVN9e679hZ2Pe   访问密码 203a 一.系统安装工具 √ 自由天空最新万能驱动 √ 一键GHOST备份还原系统 √ 硬盘安装系统安装器,增 ...

  10. 2021-04-04:给定一个非负数组arr,和一个正数m。 返回arr的所有子序列中累加和%m之后的最大值。

    2021-04-04:给定一个非负数组arr,和一个正数m. 返回arr的所有子序列中累加和%m之后的最大值. 福大大 答案2021-04-04: 自然智慧即可. 1.递归,累加和. 2.动态规划,累 ...