Documentation ¶
Overview ¶
Package errors implements functions to manipulate errors.
This package implements the Go 2 draft designs for error inspection and printing:
https://go.googlesource.com/proposal/+/master/design/go2draft.md
This is an EXPERIMENTAL package, and may change in arbitrary ways without notice.
Example ¶
package main import ( "fmt" "time" ) // MyError is an error implementation that includes a time and message. type MyError struct { When time.Time What string } func (e MyError) Error() string { return fmt.Sprintf("%v: %v", e.When, e.What) } func oops() error { return MyError{ time.Date(1989, 3, 15, 22, 30, 0, 0, time.UTC), "the file system has gone away", } } func main() { if err := oops(); err != nil { fmt.Println(err) } }
Output: 1989-03-15 22:30:00 +0000 UTC: the file system has gone away
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func As ¶
As finds the first error in err's chain that matches a type to which target points, and if so, sets the target to its value and reports success. An error matches a type if it is of the same type, or if it has an As method such that As(target) returns true. As will panic if target is nil or not a pointer.
The As method should set the target to its value and report success if err matches the type to which target points and report success.
Example ¶
package main import ( "fmt" "os" "golang.org/x/exp/errors" ) func main() { _, err := os.Open("non-existing") if err != nil { var pathError *os.PathError if errors.As(err, &pathError) { fmt.Println("Failed at path:", pathError.Path) } } }
Output: Failed at path: non-existing
func Is ¶
Is returns true if any error in err's chain matches target.
An error is considered to match a target if it is equal to that target or if it implements an Is method such that Is(target) returns true.
func New ¶
New returns an error that formats as the given text.
The returned error embeds a Frame set to the caller's location and implements Formatter to show this information when printed with details.
Example ¶
package main import ( "fmt" "golang.org/x/exp/errors" ) func main() { err := errors.New("emit macho dwarf: elf header corrupted") if err != nil { fmt.Print(err) } }
Output: emit macho dwarf: elf header corrupted
Example (Errorf) ¶
The fmt package's Errorf function lets us use the package's formatting features to create descriptive error messages.
package main import ( "fmt" ) func main() { const name, id = "bimmler", 17 err := fmt.Errorf("user %q (id %d) not found", name, id) if err != nil { fmt.Print(err) } }
Output: user "bimmler" (id 17) not found
Types ¶
type Formatter ¶
type Formatter interface { error // FormatError prints the receiver's first error and returns the next error in // the error chain, if any. FormatError(p Printer) (next error) }
A Formatter formats error messages.
type Frame ¶
type Frame struct {
// contains filtered or unexported fields
}
A Frame contains part of a call stack.
type Printer ¶
type Printer interface { // Print appends args to the message output. Print(args ...interface{}) // Printf writes a formatted string. Printf(format string, args ...interface{}) // Detail reports whether error detail is requested. // After the first call to Detail, all text written to the Printer // is formatted as additional detail, or ignored when // detail has not been requested. // If Detail returns false, the caller can avoid printing the detail at all. Detail() bool }
A Printer formats error messages.
The most common implementation of Printer is the one provided by package fmt during Printf. Localization packages such as golang.org/x/text/message typically provide their own implementations.