...
1
2
3
4 package errors
5
6
7
8
9
10
11
12
13
14
15
16
17 func Join(errs ...error) error {
18 n := 0
19 for _, err := range errs {
20 if err != nil {
21 n++
22 }
23 }
24 if n == 0 {
25 return nil
26 }
27 e := &joinError{
28 errs: make([]error, 0, n),
29 }
30 for _, err := range errs {
31 if err != nil {
32 e.errs = append(e.errs, err)
33 }
34 }
35 return e
36 }
37
38 type joinError struct {
39 errs []error
40 }
41
42 func (e *joinError) Error() string {
43 var b []byte
44 for i, err := range e.errs {
45 if i > 0 {
46 b = append(b, '\n')
47 }
48 b = append(b, err.Error()...)
49 }
50 return string(b)
51 }
52
53 func (e *joinError) Unwrap() []error {
54 return e.errs
55 }
56
57
58
59
60
61
62
63 func Unwrap(err error) error {
64 u, ok := err.(interface {
65 Unwrap() error
66 })
67 if !ok {
68 return nil
69 }
70 return u.Unwrap()
71 }
72
View as plain text