mirror of https://go.googlesource.com/go
112 lines
2.2 KiB
Go
112 lines
2.2 KiB
Go
// Copyright 2012 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package errors_test
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"io/fs"
|
|
"os"
|
|
"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 Example() {
|
|
if err := oops(); err != nil {
|
|
fmt.Println(err)
|
|
}
|
|
// Output: 1989-03-15 22:30:00 +0000 UTC: the file system has gone away
|
|
}
|
|
|
|
func ExampleNew() {
|
|
err := errors.New("emit macho dwarf: elf header corrupted")
|
|
if err != nil {
|
|
fmt.Print(err)
|
|
}
|
|
// Output: emit macho dwarf: elf header corrupted
|
|
}
|
|
|
|
// The fmt package's Errorf function lets us use the package's formatting
|
|
// features to create descriptive error messages.
|
|
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)
|
|
}
|
|
// Output: user "bimmler" (id 17) not found
|
|
}
|
|
|
|
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")
|
|
}
|
|
// Output:
|
|
// err1
|
|
// err2
|
|
// err is err1
|
|
// err is err2
|
|
}
|
|
|
|
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)
|
|
}
|
|
}
|
|
|
|
// Output:
|
|
// file does not exist
|
|
}
|
|
|
|
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)
|
|
}
|
|
}
|
|
|
|
// Output:
|
|
// Failed at path: non-existing
|
|
}
|
|
|
|
func ExampleUnwrap() {
|
|
err1 := errors.New("error1")
|
|
err2 := fmt.Errorf("error2: [%w]", err1)
|
|
fmt.Println(err2)
|
|
fmt.Println(errors.Unwrap(err2))
|
|
// Output:
|
|
// error2: [error1]
|
|
// error1
|
|
}
|