errors包

1. errors包内置的结构体

type errorString struct {s string
}

当前结构体,包含一个成员属性s,用于表示错误信息,并且结构体实现了输出错误信息的方法。

func (e *errorString) Error() string {return e.s
}

2. errors包内置的初始化方法

func New(text string) error {return &errorString{text}
}

用于初始化内部结构体信息,并且返回对应的错误结构体。

备注: golang包提供的错误信息过于简单,只做了一层简单的包装,基于此,在go1.13版本,扩展了错误信息.

文件定义: errorswrap.go

3. 包提供的内置方法。

说明:%w 为处理包装错误的格式化符号.

获取内层的err类型-Unwrap函数

func Unwrap(err error) error {u, ok := err.(interface {Unwrap() error})if !ok {return nil}return u.Unwrap()
}

判断是否包含目标的错误类型-IS函数

func Is(err, target error) bool {if target == nil {return err == target}isComparable := reflectlite.TypeOf(target).Comparable()for {// 判断传入的err和target是否相等if isComparable && err == target {return true}// 判断传入的err是否包含Is方法,存在就调用,并且返回判断结果if x, ok := err.(interface{ Is(error) bool }); ok && x.Is(target) {return true}// 获取内层的err信息if err = Unwrap(err); err == nil {return false}}
}

断言包含包装err的方法

func As(err error, target interface{}) bool {if target == nil {panic("errors: target cannot be nil")}val := reflectlite.ValueOf(target)typ := val.Type()if typ.Kind() != reflectlite.Ptr || val.IsNil() {panic("errors: target must be a non-nil pointer")}if e := typ.Elem(); e.Kind() != reflectlite.Interface && !e.Implements(errorType) {panic("errors: *target must be interface or implement error")}targetType := typ.Elem()// 循环遍历每一层的errfor err != nil {if reflectlite.TypeOf(err).AssignableTo(targetType) {val.Elem().Set(reflectlite.ValueOf(err))return true}if x, ok := err.(interface{ As(interface{}) bool }); ok && x.As(target) {return true}err = Unwrap(err)}return false
}

调用demo.go

package mainimport ("errors""fmt"
)func main() {e := errors.New("Invalid bad params ")w := fmt.Errorf("错误信息:%w",e)fmt.Println(errors.Is(w,e))
}

输出信息

E:goprojectstudy>go run main.go
true

golang errors 取 错误 信息_golang-标准errors包的学习相关推荐

  1. golang errors 取 错误 信息_Golang 单元测试:有哪些误区和实践?

    背景 测试是保证代码质量的有效手段,而单元测试是程序模块儿的最小化验证.单元测试的重要性是不言而喻的.相对手工测试,单元测试具有自动化执行.可自动回归,效率较高的特点.对于问题的发现效率,单测的也相对 ...

  2. jsr303jsp页面怎么显示错误信息_springmvc使用JSR-303进行数据校验实例

    项目中,通常使用较多的是前端的校验,比如页面中js校验以及form表单使用bootstrap校验.然而对于安全要求较高点建议在服务端进行校验. 服务端校验: 控制层controller:校验页面请求的 ...

  3. laravel 自动验证,提示验证成功,失败信息,引入语言包

    JavaScript也可以进行一些验证操作,但是有些情况下不好用(禁用JavaScript).这时候就要使用后端的一些机制.能够在后端对用户提交的数据进行验证,这个就是后端的自动验证. 案例:编写自动 ...

  4. vue 启动报错,但是没有错误信息 Failed to compile with 1 errors

    vue webpack2.0 有报错但是没有错误提示 完全看不到错误信息,懵逼 昨天还运行好好的项目,今天一来启动搞这 搜了下码友们遇到类似的问题: npm run build 打印出详细信息: 意思 ...

  5. Handling and Logging Errors处理错误日志记录

    Handling and Logging Errors Introduction 现实会出很多错误,例如数据库连接断开,要发送合适的消息给回Client,并在Server记录日志. Handing R ...

  6. 标准C库函数之perror()、strerror(),以及他们之间各种的优缺点(打印错误信息)

    前言 如果,想要深入的学习标准C库中perror.strerror函数,还是需要去自己阅读Linux系统中的帮助文档. 具体输入命令: man 3 perror man 3 strerror 即可查阅 ...

  7. 关于在ubuntu下解压文件到指定文件下时出现Exiting with failure status due to previous errors的错误

    这几天在ubuntu下把已经下载好的东西解压到指定文件时,出现了Exiting with failure status due toprevious errors的错误,如下图 在csdn上找了一些文 ...

  8. 怎样用springboot开发cs_springboot开发之配置自定义的错误界面和错误信息

    如何定制错误页面? (1)在有模板引擎的情况下:在template文件夹下的error/状态码:即将错误页面命名为:错误状态码.html放在template文件夹里面的error文件夹下,发生此状态码 ...

  9. AngularJS 表单数据验证及错误信息提示

    一.表单验证基本原理 表单验证包括两个主题: 定义验证规则,验证数据有效性. 显示验证结果,把验证结果以友好的方式显示给用户. H5内置一些验证功能,并会显示内置的错误提示信息,先要禁用它,在< ...

  10. C语言函数调用错误信息打印

    错误打印 说明 所需头文件 PERROR() STRERROR() 两个宏说明: __FILE__(左右各两个下划线未显示) __LINE__(左右各两个下划线未显示) 其他函数: 说明 我的目的是在 ...

最新文章

  1. 半分钟内能看透问题本质的人是如何思考的?
  2. 穿越五年的时空,重回三元湖畔
  3. JavaScript那些事儿(1):对比JavaScript和jQuery的Dom操作
  4. django 1.3下关于静态文件staticfiles的设置
  5. swagger2maven依赖_Maven + SpringMVC项目集成Swagger
  6. Thread.join的作用和原理
  7. ubuntu保护眼睛的设置
  8. PHP项目性能优化-总览
  9. Qt 之播放m3u8视频流
  10. php echo eot,(基础篇)php中理解print EOT分界符和echo EOT的用法区别
  11. 基础知识(HTML + CSS)整理
  12. 经典文章:一位营销总监的辞职信及回复
  13. 轻院2218: 小明的数字游戏( 给你n个数字,把这n个数字拼接起来,最大能拼出的数字是多少?)
  14. NOIP2021 T3 方差
  15. 如何查看电脑CPU的核心个数
  16. 网页最窄770px最宽1024px经典布局
  17. 和校验及异或校验C代码
  18. c语言求三个数最值非函数,C语言编程:从键盘任意输入三个数,编写求其最大值、最小值的函数,用指针作函数参数实现。...
  19. JAVA毕业设计计算机专业招聘网站计算机源码+lw文档+系统+调试部署+数据库
  20. 春雷计划:学Python竟然还有这种福利!

热门文章

  1. Spark分布式安装
  2. Web Service(二):cxf 实现
  3. web 前端(轮番插件)
  4. Linux-SHELL基本操作
  5. 页面静态化3 --- 伪静态技术
  6. 处理顶点——使用顶点缓冲和索引缓冲将顶点和索引保存在显存中
  7. Flash 应用:大智慧flash版本
  8. java饼状图获取数据集_HighChars3D饼图(从后台获取数据)
  9. 【视频】文本挖掘:主题模型(LDA)及R语言实现分析游记数据
  10. 拓端tecdat|R语言Metropolis Hastings采样和贝叶斯泊松回归Poisson模型