| | |
| | |
| | |
| |
|
| | package errors_test |
| |
|
| | import ( |
| | "errors" |
| | "fmt" |
| | "io/fs" |
| | "os" |
| | "time" |
| | ) |
| |
|
| | |
| | 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 Example() { |
| | if err := oops(); err != nil { |
| | fmt.Println(err) |
| | } |
| | |
| | } |
| |
|
| | func ExampleNew() { |
| | err := errors.New("emit macho dwarf: elf header corrupted") |
| | if err != nil { |
| | fmt.Print(err) |
| | } |
| | |
| | } |
| |
|
| | func OopsNew() error { |
| | return errors.New("an error") |
| | } |
| |
|
| | var ErrSentinel = errors.New("an error") |
| |
|
| | func OopsSentinel() error { |
| | return ErrSentinel |
| | } |
| |
|
| | |
| | |
| | |
| | func ExampleNew_unique() { |
| | err1 := OopsNew() |
| | err2 := OopsNew() |
| | fmt.Println("Errors using distinct errors.New calls:") |
| | fmt.Printf("Is(%q, %q) = %v\n", err1, err2, errors.Is(err1, err2)) |
| |
|
| | err3 := OopsSentinel() |
| | err4 := OopsSentinel() |
| | fmt.Println() |
| | fmt.Println("Errors using a sentinel error:") |
| | fmt.Printf("Is(%q, %q) = %v\n", err3, err4, errors.Is(err3, err4)) |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | } |
| |
|
| | |
| | |
| | func ExampleNew_errorf() { |
| | const name, id = "bimmler", 17 |
| | err := fmt.Errorf("user %q (id %d) not found", name, id) |
| | if err != nil { |
| | fmt.Print(err) |
| | } |
| | |
| | } |
| |
|
| | func ExampleJoin() { |
| | err1 := errors.New("err1") |
| | err2 := errors.New("err2") |
| | err := errors.Join(err1, err2) |
| | fmt.Println(err) |
| | if errors.Is(err, err1) { |
| | fmt.Println("err is err1") |
| | } |
| | if errors.Is(err, err2) { |
| | fmt.Println("err is err2") |
| | } |
| | fmt.Println(err.(interface{ Unwrap() []error }).Unwrap()) |
| | |
| | |
| | |
| | |
| | |
| | |
| | } |
| |
|
| | func ExampleIs() { |
| | if _, err := os.Open("non-existing"); err != nil { |
| | if errors.Is(err, fs.ErrNotExist) { |
| | fmt.Println("file does not exist") |
| | } else { |
| | fmt.Println(err) |
| | } |
| | } |
| |
|
| | |
| | |
| | } |
| |
|
| | type MyIsError struct { |
| | err string |
| | } |
| |
|
| | func (e MyIsError) Error() string { |
| | return e.err |
| | } |
| | func (e MyIsError) Is(err error) bool { |
| | return err == fs.ErrPermission |
| | } |
| |
|
| | |
| | |
| | func ExampleIs_custom_match() { |
| | var err error = MyIsError{"an error"} |
| | fmt.Println("Error equals fs.ErrPermission:", err == fs.ErrPermission) |
| | fmt.Println("Error is fs.ErrPermission:", errors.Is(err, fs.ErrPermission)) |
| |
|
| | |
| | |
| | |
| | } |
| |
|
| | func ExampleAs() { |
| | if _, err := os.Open("non-existing"); err != nil { |
| | var pathError *fs.PathError |
| | if errors.As(err, &pathError) { |
| | fmt.Println("Failed at path:", pathError.Path) |
| | } else { |
| | fmt.Println(err) |
| | } |
| | } |
| |
|
| | |
| | |
| | } |
| |
|
| | func ExampleAsType() { |
| | if _, err := os.Open("non-existing"); err != nil { |
| | if pathError, ok := errors.AsType[*fs.PathError](err); ok { |
| | fmt.Println("Failed at path:", pathError.Path) |
| | } else { |
| | fmt.Println(err) |
| | } |
| | } |
| | |
| | |
| | } |
| |
|
| | type MyAsError struct { |
| | err string |
| | } |
| |
|
| | func (e MyAsError) Error() string { |
| | return e.err |
| | } |
| | func (e MyAsError) As(target any) bool { |
| | pe, ok := target.(**fs.PathError) |
| | if !ok { |
| | return false |
| | } |
| | *pe = &fs.PathError{ |
| | Op: "custom", |
| | Path: "/", |
| | Err: errors.New(e.err), |
| | } |
| | return true |
| | } |
| |
|
| | |
| | |
| | func ExampleAs_custom_match() { |
| | var err error = MyAsError{"an error"} |
| | fmt.Println("Error:", err) |
| | fmt.Printf("TypeOf err: %T\n", err) |
| |
|
| | var pathError *fs.PathError |
| | ok := errors.As(err, &pathError) |
| | fmt.Println("Error as fs.PathError:", ok) |
| | fmt.Println("fs.PathError:", pathError) |
| |
|
| | |
| | |
| | |
| | |
| | |
| | } |
| |
|
| | |
| | |
| | func ExampleAsType_custom_match() { |
| | var err error = MyAsError{"an error"} |
| | fmt.Println("Error:", err) |
| | fmt.Printf("TypeOf err: %T\n", err) |
| |
|
| | pathError, ok := errors.AsType[*fs.PathError](err) |
| | fmt.Println("Error as fs.PathError:", ok) |
| | fmt.Println("fs.PathError:", pathError) |
| |
|
| | |
| | |
| | |
| | |
| | |
| | } |
| |
|
| | func ExampleUnwrap() { |
| | err1 := errors.New("error1") |
| | err2 := fmt.Errorf("error2: [%w]", err1) |
| | fmt.Println(err2) |
| | fmt.Println(errors.Unwrap(err2)) |
| | |
| | |
| | |
| | } |
| |
|