package errors_test import ( "fmt" "github.com/pkg/errors" ) func ExampleNew() { err := errors.New("whoops") fmt.Println(err) // Output: whoops } func ExampleNew_printf() { err := errors.New("whoops") fmt.Printf("%+v", err) // Output: github.com/pkg/errors/example_test.go:17: whoops } func ExampleWrap() { cause := errors.New("whoops") err := errors.Wrap(cause, "oh noes") fmt.Println(err) // Output: oh noes: whoops } func fn() error { e1 := errors.New("error") e2 := errors.Wrap(e1, "inner") e3 := errors.Wrap(e2, "middle") return errors.Wrap(e3, "outer") } func ExampleCause() { err := fn() fmt.Println(err) fmt.Println(errors.Cause(err)) // Output: outer: middle: inner: error // error } func ExampleCause_printf() { err := fn() fmt.Printf("%+v\n", err) // Output: github.com/pkg/errors/example_test.go:32: error // github.com/pkg/errors/example_test.go:33: inner // github.com/pkg/errors/example_test.go:34: middle // github.com/pkg/errors/example_test.go:35: outer } func ExampleWrapf() { cause := errors.New("whoops") err := errors.Wrapf(cause, "oh noes #%d", 2) fmt.Println(err) // Output: oh noes #2: whoops } func ExampleErrorf() { err := errors.Errorf("whoops: %s", "foo") fmt.Printf("%+v", err) // Output: github.com/pkg/errors/example_test.go:66: whoops: foo } func Example_stacktrace() { type Stacktrace interface { Stacktrace() errors.Stacktrace } err, ok := errors.Cause(fn()).(Stacktrace) if !ok { panic("oops, err does not implement Stacktrace") } st := err.Stacktrace() fmt.Printf("%+v", st[0:2]) // top two frames // Output: [github.com/pkg/errors/example_test.go:32 github.com/pkg/errors/example_test.go:77] }