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对象中的错误码。

相关文章
|
8月前
|
程序员 开发者 Python
Python网络编程基础(Socket编程) 错误处理和异常处理的最佳实践
【4月更文挑战第11天】在网络编程中,错误处理和异常管理不仅是为了程序的健壮性,也是为了提供清晰的用户反馈以及优雅的故障恢复。在前面的章节中,我们讨论了如何使用`try-except`语句来处理网络错误。现在,我们将深入探讨错误处理和异常处理的最佳实践。
|
8月前
|
程序员 测试技术 数据库连接
PHP编程中的错误处理技巧
在PHP编程中,处理错误是至关重要的一环。本文将介绍几种常见的PHP错误类型及其处理技巧,包括语法错误、运行时错误和逻辑错误。通过学习正确的错误处理方法,可以提高代码的可靠性和可维护性,从而更好地保障程序的稳定性和安全性。
72 2
|
8月前
|
网络协议 网络安全 Python
Python网络编程基础(Socket编程) 错误处理和异常
【4月更文挑战第10天】网络编程涉及到很多复杂的操作和潜在的风险,如连接失败、数据丢失、超时等问题。因此,正确的错误处理和异常捕获是确保网络程序稳定性和可靠性的关键。本章将介绍网络编程中常见的错误和异常,并探讨如何在Python中进行有效的错误处理。
|
8月前
|
Go 开发者
Go语言中的错误处理与异常机制:实践与最佳策略
【2月更文挑战第7天】Go语言以其独特的错误处理机制而闻名,它鼓励显式错误检查而不是依赖于异常。本文将探讨错误处理与异常机制在Go语言中的实际应用,并分享一些最佳实践,帮助开发者编写更加健壮和易于维护的Go代码。
|
Go 开发者
错误处理不再难!Go语言错误处理完全指南
错误处理不再难!Go语言错误处理完全指南
225 0
|
3月前
|
存储 安全 Java
如何使用泛型来避免`ArrayStoreException`异常?
使用泛型可以避免`ArrayStoreException`异常,通过在编译时检查类型安全,确保数组中只存储正确类型的对象,从而防止运行时错误。泛型提供了一种更安全、更灵活的编程方式。
27 4
|
5月前
|
PHP 开发者 UED
PHP编程中的错误处理与异常管理
【8月更文挑战第27天】在PHP编程的世界中,错误和异常是开发者常遇到的两大挑战。本文旨在通过浅显易懂的方式,引导读者理解如何在PHP代码中妥善处理错误和异常。我们将从基础的错误处理讲起,逐步深入到异常管理的高级技巧,确保你的代码在遇到问题时能够优雅地处理,而不是崩溃。文章将用实例说明如何捕获、记录和处理这些事件,以保障应用的稳定性和用户体验。
一文搞懂Go语言错误处理【异常捕获、异常抛出】
一文搞懂Go语言错误处理【异常捕获、异常抛出】
一文搞懂Go语言错误处理【异常捕获、异常抛出】
GO语言基础教程20——Error接口和错误处理
Go 语言中把错误当成一种特殊的值来处理,不支持其他语言中使用try/catch捕获异常的方式。
|
Rust Java 程序员
什么是好的错误消息? 讨论一下Java系统中的错误码设计
一个好的Error Message主要包含三个部分:Context: 什么导致了错误?发生错误的时候代码想做什么?The error itself: 到底是什么导致了失败?具体的原因和当时的数据是什么?Mitigation: 有什么解决方案来克服这个错误,也可以理解为 Solutions。听起来还是有点抽象,能否给点代码具体说明下?
什么是好的错误消息? 讨论一下Java系统中的错误码设计