File tree 2 files changed +8
-4
lines changed 2 files changed +8
-4
lines changed Original file line number Diff line number Diff line change @@ -88,18 +88,17 @@ func As(err error, target interface{}) bool {
88
88
panic ("errors: *target must be interface or implement error" )
89
89
}
90
90
targetType := typ .Elem ()
91
- for {
91
+ for err != nil {
92
92
if reflect .TypeOf (err ).AssignableTo (targetType ) {
93
93
val .Elem ().Set (reflect .ValueOf (err ))
94
94
return true
95
95
}
96
96
if x , ok := err .(interface { As (interface {}) bool }); ok && x .As (target ) {
97
97
return true
98
98
}
99
- if err = Unwrap (err ); err == nil {
100
- return false
101
- }
99
+ err = Unwrap (err )
102
100
}
101
+ return false
103
102
}
104
103
105
104
var errorType = reflect .TypeOf ((* error )(nil )).Elem ()
Original file line number Diff line number Diff line change @@ -30,6 +30,7 @@ func TestIs(t *testing.T) {
30
30
match bool
31
31
}{
32
32
{nil , nil , true },
33
+ {nil , err1 , false },
33
34
{err1 , nil , false },
34
35
{err1 , err1 , true },
35
36
{erra , err1 , true },
@@ -89,6 +90,10 @@ func TestAs(t *testing.T) {
89
90
target interface {}
90
91
match bool
91
92
}{{
93
+ nil ,
94
+ & errP ,
95
+ false ,
96
+ }, {
92
97
xerrors .Errorf ("pittied the fool: %w" , errorT {}),
93
98
& errT ,
94
99
true ,
You can’t perform that action at this time.
0 commit comments