GoFrame错误处理的常用方法&错误码的使用

简介: 这篇文章将为大家介绍:GoFrame错误处理的常用方法&错误码的使用。如何自定义错误对象、如何忽略部分堆栈信息、如何自定义错误码的返回、如何获取error对象中的错误码。

如何进行错误创建?


GoFrame的错误创建有多种方法,用于不同的场景,框架支持还是非常给力的。


New/Newf


用于创建一个自定义错误信息的error对象,并包含堆栈信息。


New(text string) error
Newf(format string, args ...interface{}) error


Wrap/Wrapf


用于包裹其他错误error对象,构造成多级的错误信息,包含堆栈信息。


func Wrap(err error, text string) error
func Wrapf(err error, format string, args ...interface{}) error


NewSkip/NewSkipf


用于创建一个自定义错误信息的error对象,并且忽略部分堆栈信息(按照当前调用方法位置往上忽略)。

注意:这是一个高级功能,在我们的业务开发中几乎不会使用。除非非用不可,不然不建议大家使用。


func NewSkip(skip int, text string) error 
func NewSkipf(skip int, format string, args ...interface{}) error


在我们的业务开发中,错误码的定义和错误的定义一样重要,约定好统一的错误码对前后端协同开发、定位问题、合理输出错误信息都至关重要。


下面介绍错误码相关的使用:


错误码使用


错误码相关方法概览


func NewCode(code int, text string) error
func NewCodef(code int, format string, args ...interface{}) error
func NewCodeSkip(code, skip int, text string) error
func NewCodeSkipf(code, skip int, format string, args ...interface{}) error
func WrapCode(code int, err error, text string) error
func WrapCodef(code int, err error, format string, args ...interface{}) error


NewCode/NewCodef


功能同New/Newf方法,用于创建一个自定义错误信息的error对象,并包含堆栈信息,并增加错误码对象的输入。


NewCode(code gcode.Code, text ...string) error
NewCodef(code gcode.Code, format string, args ...interface{}) error


举个栗子


func ExampleNewCode() {
    err := gerror.NewCode(gcode.New(101, "", nil), "My Error")
    fmt.Println(err.Error())    // My Error
    fmt.Println(gerror.Code(err))    //101
}
func ExampleNewCodef() {
    err := gerror.NewCodef(gcode.New(101, "", nil), "It's %s", "My Error")
    fmt.Println(err.Error()) //It's My Error
    fmt.Println(gerror.Code(err).Code()) //101
}


WrapCode/WrapCodef


功能同Wrap/Wrapf方法,用于包裹其他错误error对象,构造成多级的错误信息,包含堆栈信息,并增加错误码参数的输入。


WrapCode(code gcode.Code, err error, text ...string) error
WrapCodef(code gcode.Code, err error, format string, args ...interface{}) error


举个栗子


func ExampleWrapCode() {
    err1 := errors.New("permission denied")
    err2 := gerror.WrapCode(gcode.New(403, "", nil), err1, "Custom Error")
    fmt.Println(err2.Error())     // Custom Error: permission denied
    fmt.Println(gerror.Code(err2).Code())    // 403
}
func ExampleWrapCodef() {
    err1 := errors.New("permission denied")
    err2 := gerror.WrapCodef(gcode.New(403, "", nil), err1, "It's %s", "Custom Error")
    fmt.Println(err2.Error())    // It's Custom Error: permission denied
    fmt.Println(gerror.Code(err2).Code())    // 403
}


NewCodeSkip/NewCodeSkipf


功能同NewSkip/NewSkipf,用于创建一个自定义错误信息的error对象,并且忽略部分堆栈信息(按照当前调用方法位置往上忽略),并增加错误参数输入。


func NewCodeSkip(code, skip int, text string) error
func NewCodeSkipf(code, skip int, format string, args ...interface{}) error


总结


看到这里大家一定发现了规律:错误码对象的方法和错误对象的方法是一一对应的,错误码对象的方法相比于错误对象的方法,就是多了一个参数输出错误码code的入参而已。

上面我们介绍了如何设置错误码,下面介绍如何获取错误码:


获取error中的错误码接口


func Code(err error) gcode.Code


注意


当给定的error参数不带有错误码信息时,该方法返回预定义的错误码gcode.CodeNil


总结


通过这篇文章我们了解到GoFrame错误处理相关的知识点:如何自定义错误对象、如何忽略部分堆栈信息、如何自定义错误码的返回、如何获取error对象中的错误码。

相关文章
|
4月前
|
JSON JavaScript 前端开发
C++ 智能指针与 JSON 处理:高级编程技巧与常见问题解析
C++ 智能指针与 JSON 处理:高级编程技巧与常见问题解析
377 0
|
17天前
|
Java 对象存储 开发者
Java系统中的错误码设计问题之设计包含context错误消息的规范如何解决
Java系统中的错误码设计问题之设计包含context错误消息的规范如何解决
10 0
|
4月前
|
JSON 测试技术 API
记一个低级错误导致的接口失败
记一个低级错误导致的接口失败
|
10月前
|
前端开发 Java 程序员
你还在统一返回ApiResult吗?duck不必,来看API错误处理最佳实践
相信不少 Java 开发都在项目中使用过类似 ApiResult 这样的对象来包装 Api 返回类型,这相比什么都不包装有一定的好处,但这真的就是最好的做法吗?
|
数据采集 数据安全/隐私保护
如何使用异常处理机制捕获和处理请求失败的情况
在爬虫开发中,我们经常会遇到请求失败的情况,比如网络超时、连接错误、服务器拒绝等。这些情况会导致我们无法获取目标网页的内容,从而影响爬虫的效果和效率。为了解决这个问题,我们需要使用异常处理机制来捕获和处理请求失败的情况,从而提高爬虫的稳定性和稳定性。
如何使用异常处理机制捕获和处理请求失败的情况
|
JSON 前端开发 数据格式
前端对接口参数错误如何解决
前端对接口参数错误如何解决
105 0
|
JSON 前端开发 数据格式
前端对接口参数错误如何解决
前端对接口参数错误如何解决
76 0
|
存储
Yii2进行数据验证的时候,如何自定义中文错误信息内容?底层原理是什么?
Yii2进行数据验证的时候,如何自定义中文错误信息内容?底层原理是什么?
165 0
|
Rust Java 程序员
什么是好的错误消息? 讨论一下Java系统中的错误码设计
一个好的Error Message主要包含三个部分:Context: 什么导致了错误?发生错误的时候代码想做什么?The error itself: 到底是什么导致了失败?具体的原因和当时的数据是什么?Mitigation: 有什么解决方案来克服这个错误,也可以理解为 Solutions。听起来还是有点抽象,能否给点代码具体说明下?
什么是好的错误消息? 讨论一下Java系统中的错误码设计
|
开发者
GoFrame 错误处理的常用方法&错误码的使用
前言摘要 这篇文章将为大家介绍:GoFrame 错误处理的常用方法&错误码的使用。如何自定义错误对象、如何忽略部分堆栈信息、如何自定义错误码的返回、如何获取error对象中的错误码。
215 0