| // Package errors implements functions to manipulate errors. |
| package errors |
| |
| import "fmt" |
| |
| // New returns an error that formats as the given text. |
| func New(text string) error { |
| return Errorf(text) |
| } |
| |
| // Errorf returns a formatted error. |
| func Errorf(format string, args ...interface{}) error { |
| return fmt.Errorf(format, args...) |
| } |
| |
| // Cause returns the underlying cause of the error, if possible. |
| // An error value has a cause if it implements the following |
| // method: |
| // |
| // 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 { |
| if err == nil { |
| return nil |
| } |
| type causer interface { |
| Cause() error |
| } |
| if err, ok := err.(causer); ok { |
| return err.Cause() |
| } |
| return err |
| } |