example_test.go 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. package errors_test
  2. import (
  3. "fmt"
  4. "github.com/pkg/errors"
  5. )
  6. func ExampleNew() {
  7. err := errors.New("whoops")
  8. fmt.Println(err)
  9. // Output: whoops
  10. }
  11. func ExampleNew_printf() {
  12. err := errors.New("whoops")
  13. fmt.Printf("%+v", err)
  14. // Output: github.com/pkg/errors/example_test.go:17: whoops
  15. }
  16. func ExampleWrap() {
  17. cause := errors.New("whoops")
  18. err := errors.Wrap(cause, "oh noes")
  19. fmt.Println(err)
  20. // Output: oh noes: whoops
  21. }
  22. func fn() error {
  23. e1 := errors.New("error")
  24. e2 := errors.Wrap(e1, "inner")
  25. e3 := errors.Wrap(e2, "middle")
  26. return errors.Wrap(e3, "outer")
  27. }
  28. func ExampleCause() {
  29. err := fn()
  30. fmt.Println(err)
  31. fmt.Println(errors.Cause(err))
  32. // Output: outer: middle: inner: error
  33. // error
  34. }
  35. func ExampleCause_printf() {
  36. err := fn()
  37. fmt.Printf("%+v\n", err)
  38. // Output: github.com/pkg/errors/example_test.go:32: error
  39. // github.com/pkg/errors/example_test.go:33: inner
  40. // github.com/pkg/errors/example_test.go:34: middle
  41. // github.com/pkg/errors/example_test.go:35: outer
  42. }
  43. func ExampleWrapf() {
  44. cause := errors.New("whoops")
  45. err := errors.Wrapf(cause, "oh noes #%d", 2)
  46. fmt.Println(err)
  47. // Output: oh noes #2: whoops
  48. }
  49. func ExampleErrorf() {
  50. err := errors.Errorf("whoops: %s", "foo")
  51. fmt.Printf("%+v", err)
  52. // Output: github.com/pkg/errors/example_test.go:66: whoops: foo
  53. }
  54. func Example_stacktrace() {
  55. type Stacktrace interface {
  56. Stacktrace() errors.Stacktrace
  57. }
  58. err, ok := errors.Cause(fn()).(Stacktrace)
  59. if !ok {
  60. panic("oops, err does not implement Stacktrace")
  61. }
  62. st := err.Stacktrace()
  63. fmt.Printf("%+v", st[0:2]) // top two frames
  64. // Output: [github.com/pkg/errors/example_test.go:32 github.com/pkg/errors/example_test.go:77]
  65. }