-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy patherrors.go
More file actions
73 lines (65 loc) · 1.33 KB
/
errors.go
File metadata and controls
73 lines (65 loc) · 1.33 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
package errors
import "errors"
// Join
// 组合错误
func Join(errs ...error) error {
errsLen := len(errs)
if errsLen == 0 {
return nil
}
var prev *EnhancedError
for i := errsLen - 1; i > -1; i-- {
err := errs[i]
if err == nil {
continue
}
ee, ok := err.(*EnhancedError)
if !ok {
err = New(err.Error(), WithDepth(3))
ee = err.(*EnhancedError)
}
if prev == nil {
prev = ee
continue
}
ee.Wrap(prev)
prev = ee
}
return prev
}
// Is
// 判断 err 是否为或包含 target。
// err 可以是一组错误,target 建议是一个错误,即便 target 是一组,也是取顶层进行判断。
func Is(err error, target error) bool {
return errors.Is(err, target)
}
// As
// 转化为目标。
// target 必须是指针。当类型是指针,target 为指针的指针。
func As(err error, target any) bool {
return errors.As(err, target)
}
// AsEnhancedError
// 转化为 EnhancedError
func AsEnhancedError(err error) (*EnhancedError, bool) {
if err == nil {
return nil, false
}
ee, ok := err.(*EnhancedError)
return ee, ok
}
// Unwrap
// 取包裹
func Unwrap(err error) error {
return errors.Unwrap(err)
}
// StackOf
// 取跟踪栈
func StackOf(err error) (fn string, file string, line int, ok bool) {
ee, isEE := AsEnhancedError(err)
if isEE {
fn, file, line = ee.Stack()
ok = true
}
return
}