golang errors 取 错误 信息_golang-标准errors包的学习
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包的学习相关推荐
- golang errors 取 错误 信息_Golang 单元测试:有哪些误区和实践?
背景 测试是保证代码质量的有效手段,而单元测试是程序模块儿的最小化验证.单元测试的重要性是不言而喻的.相对手工测试,单元测试具有自动化执行.可自动回归,效率较高的特点.对于问题的发现效率,单测的也相对 ...
- jsr303jsp页面怎么显示错误信息_springmvc使用JSR-303进行数据校验实例
项目中,通常使用较多的是前端的校验,比如页面中js校验以及form表单使用bootstrap校验.然而对于安全要求较高点建议在服务端进行校验. 服务端校验: 控制层controller:校验页面请求的 ...
- laravel 自动验证,提示验证成功,失败信息,引入语言包
JavaScript也可以进行一些验证操作,但是有些情况下不好用(禁用JavaScript).这时候就要使用后端的一些机制.能够在后端对用户提交的数据进行验证,这个就是后端的自动验证. 案例:编写自动 ...
- vue 启动报错,但是没有错误信息 Failed to compile with 1 errors
vue webpack2.0 有报错但是没有错误提示 完全看不到错误信息,懵逼 昨天还运行好好的项目,今天一来启动搞这 搜了下码友们遇到类似的问题: npm run build 打印出详细信息: 意思 ...
- Handling and Logging Errors处理错误日志记录
Handling and Logging Errors Introduction 现实会出很多错误,例如数据库连接断开,要发送合适的消息给回Client,并在Server记录日志. Handing R ...
- 标准C库函数之perror()、strerror(),以及他们之间各种的优缺点(打印错误信息)
前言 如果,想要深入的学习标准C库中perror.strerror函数,还是需要去自己阅读Linux系统中的帮助文档. 具体输入命令: man 3 perror man 3 strerror 即可查阅 ...
- 关于在ubuntu下解压文件到指定文件下时出现Exiting with failure status due to previous errors的错误
这几天在ubuntu下把已经下载好的东西解压到指定文件时,出现了Exiting with failure status due toprevious errors的错误,如下图 在csdn上找了一些文 ...
- 怎样用springboot开发cs_springboot开发之配置自定义的错误界面和错误信息
如何定制错误页面? (1)在有模板引擎的情况下:在template文件夹下的error/状态码:即将错误页面命名为:错误状态码.html放在template文件夹里面的error文件夹下,发生此状态码 ...
- AngularJS 表单数据验证及错误信息提示
一.表单验证基本原理 表单验证包括两个主题: 定义验证规则,验证数据有效性. 显示验证结果,把验证结果以友好的方式显示给用户. H5内置一些验证功能,并会显示内置的错误提示信息,先要禁用它,在< ...
- C语言函数调用错误信息打印
错误打印 说明 所需头文件 PERROR() STRERROR() 两个宏说明: __FILE__(左右各两个下划线未显示) __LINE__(左右各两个下划线未显示) 其他函数: 说明 我的目的是在 ...
最新文章
- 半分钟内能看透问题本质的人是如何思考的?
- 穿越五年的时空,重回三元湖畔
- JavaScript那些事儿(1):对比JavaScript和jQuery的Dom操作
- django 1.3下关于静态文件staticfiles的设置
- swagger2maven依赖_Maven + SpringMVC项目集成Swagger
- Thread.join的作用和原理
- ubuntu保护眼睛的设置
- PHP项目性能优化-总览
- Qt 之播放m3u8视频流
- php echo eot,(基础篇)php中理解print EOT分界符和echo EOT的用法区别
- 基础知识(HTML + CSS)整理
- 经典文章:一位营销总监的辞职信及回复
- 轻院2218: 小明的数字游戏( 给你n个数字,把这n个数字拼接起来,最大能拼出的数字是多少?)
- NOIP2021 T3 方差
- 如何查看电脑CPU的核心个数
- 网页最窄770px最宽1024px经典布局
- 和校验及异或校验C代码
- c语言求三个数最值非函数,C语言编程:从键盘任意输入三个数,编写求其最大值、最小值的函数,用指针作函数参数实现。...
- JAVA毕业设计计算机专业招聘网站计算机源码+lw文档+系统+调试部署+数据库
- 春雷计划:学Python竟然还有这种福利!