Versions Compared
compared with
Key
- This line was added.
- This line was removed.
- Formatting was changed.
Equal
比较方法
错误支持比较,主要通过以下两个方法:错误对象支持比较,主要通过以下方法:
Code Block | ||
---|---|---|
| ||
// Equal reports whether current error `err` equals to error `target`. // Please note that, in default comparison for `Error`, // the errors are considered the same if both the `code` and `text` of them are the same. func Equal(err, target error) bool |
接口定义
如果自定义的错误数据结构需要支持比较,需要自定义的错误结构实现以下接口:
Code Block | ||
---|---|---|
| ||
Equal(target error) bool |
通过GoFrame
框架错误组件创建的错误对象已经实现实现了该接口,组件默认比较逻辑判断错误码和错误信息。
Note |
---|
需要注意,如果两个错误均不带错误码,并且错误信息相等,那么组件认为两个错误相等。 |
使用示例
Code Block | ||
---|---|---|
| ||
func ExampleEqual() { err1 := errors.New("permission denied") err2 := gerror.New("permission denied") err3 := gerror.NewCode(gcode.CodeNotAuthorized, "permission denied") fmt.Println(gerror.Equal(err1, err2)) fmt.Println(gerror.Equal(err2, err3)) // Output: // true // false } |
Is
包含判断
错误对象支持包含判断,主要通过以下方法:
Code Block | ||
---|---|---|
| ||
// Is reports whether current error `err` has error `target` in its chaining errors.
// It is just for implements for stdlib errors.Unwrap from Go version 1.17.
func Is(err, target error) bool |
接口定义
如果错误需要支持比较,需要自定义的错误结构实现以下两个接口:如果自定义的错误数据结构需要支持包含判断,需要自定义的错误结构实现以下接口:
Code Block | ||
---|---|---|
| ||
EqualIs(target error) bool |
通过GoFrame
框架错误组件创建的错误对象已经实现实现了该接口。
Note |
---|
需要注意,通过 |
使用示例
Code Block | ||
---|---|---|
| ||
func ExampleIs() { err1 := errors.New("permission denied") err2 := gerror.Wrap(err1, "operation failed") fmt.Println(gerror.Is(err1, err1)) fmt.Println(gerror.Is(err2, err2)) fmt.Println(gerror.Is(err2, err1)) fmt.Println(gerror.Is(targeterr1, error) bool |
GoFrame
框架错误组件创建的错误对象已经实现实现了这两个接口,因此项目在使用GoFrame
框架时不用关心错误接口实现问题。err2))
// Output:
// false
// true
// true
// false
} |
Panel | ||
---|---|---|
| ||
|