| // +build !go1.13 |
| |
| package errors |
| |
| // Cause recursively unwraps an error chain and returns the underlying cause of |
| // the error, if possible. An error value has a cause if it implements the |
| // following interface: |
| // |
| // type causer interface { |
| // Cause() error |
| // } |
| // |
| // If the error does not implement Cause, the original error will |
| // be returned. If the error is nil, nil will be returned without further |
| // investigation. |
| func Cause(err error) error { |
| type causer interface { |
| Cause() error |
| } |
| |
| for err != nil { |
| cause, ok := err.(causer) |
| if !ok { |
| break |
| } |
| err = cause.Cause() |
| } |
| return err |
| } |