创建带错误码的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(10000, "", nil), "My Error")
    	fmt.Println(err.Error())
    	fmt.Println(gerror.Code(err))
    
    	// Output:
    	// My Error
    	// 10000
    }
    
    func ExampleNewCodef() {
    	err := gerror.NewCodef(gcode.New(10000, "", nil), "It's %s", "My Error")
    	fmt.Println(err.Error())
    	fmt.Println(gerror.Code(err).Code())
    
    	// Output:
    	// It's My Error
    	// 10000
    }


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(10000, "", nil), err1, "Custom Error")
    	fmt.Println(err2.Error())
    	fmt.Println(gerror.Code(err2).Code())
    
    	// Output:
    	// Custom Error: permission denied
    	// 10000
    }
    
    func ExampleWrapCodef() {
    	err1 := errors.New("permission denied")
    	err2 := gerror.WrapCodef(gcode.New(10000, "", nil), err1, "It's %s", "Custom Error")
    	fmt.Println(err2.Error())
    	fmt.Println(gerror.Code(err2).Code())
    
    	// Output:
    	// It's Custom Error: permission denied
    	// 10000
    }


NewCodeSkip/NewCodeSkipf

  • 说明:高级方法,开发者一般很少会用到。功能同NewSkip/NewSkipf用于创建一个自定义错误信息的error对象,并且忽略部分堆栈信息(按照当前调用方法位置往上忽略),并增加错误参数输入。
  • 格式:

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


获取error中的错误码接口

func Code(err error) gcode.Code

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