example_test.go 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  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. // Example output:
  15. // whoops
  16. // github.com/pkg/errors_test.ExampleNew_printf
  17. // /home/dfc/src/github.com/pkg/errors/example_test.go:17
  18. // testing.runExample
  19. // /home/dfc/go/src/testing/example.go:114
  20. // testing.RunExamples
  21. // /home/dfc/go/src/testing/example.go:38
  22. // testing.(*M).Run
  23. // /home/dfc/go/src/testing/testing.go:744
  24. // main.main
  25. // /github.com/pkg/errors/_test/_testmain.go:106
  26. // runtime.main
  27. // /home/dfc/go/src/runtime/proc.go:183
  28. // runtime.goexit
  29. // /home/dfc/go/src/runtime/asm_amd64.s:2059
  30. }
  31. func ExampleWithMessage() {
  32. cause := errors.New("whoops")
  33. err := errors.WithMessage(cause, "oh noes")
  34. fmt.Println(err)
  35. // Output: oh noes: whoops
  36. }
  37. func ExampleWithStack() {
  38. cause := errors.New("whoops")
  39. err := errors.WithStack(cause)
  40. fmt.Println(err)
  41. // Output: whoops
  42. }
  43. func ExampleWithStack_printf() {
  44. cause := errors.New("whoops")
  45. err := errors.WithStack(cause)
  46. fmt.Printf("%+v", err)
  47. // Example Output:
  48. // whoops
  49. // github.com/pkg/errors_test.ExampleWithStack_printf
  50. // /home/fabstu/go/src/github.com/pkg/errors/example_test.go:55
  51. // testing.runExample
  52. // /usr/lib/go/src/testing/example.go:114
  53. // testing.RunExamples
  54. // /usr/lib/go/src/testing/example.go:38
  55. // testing.(*M).Run
  56. // /usr/lib/go/src/testing/testing.go:744
  57. // main.main
  58. // github.com/pkg/errors/_test/_testmain.go:106
  59. // runtime.main
  60. // /usr/lib/go/src/runtime/proc.go:183
  61. // runtime.goexit
  62. // /usr/lib/go/src/runtime/asm_amd64.s:2086
  63. // github.com/pkg/errors_test.ExampleWithStack_printf
  64. // /home/fabstu/go/src/github.com/pkg/errors/example_test.go:56
  65. // testing.runExample
  66. // /usr/lib/go/src/testing/example.go:114
  67. // testing.RunExamples
  68. // /usr/lib/go/src/testing/example.go:38
  69. // testing.(*M).Run
  70. // /usr/lib/go/src/testing/testing.go:744
  71. // main.main
  72. // github.com/pkg/errors/_test/_testmain.go:106
  73. // runtime.main
  74. // /usr/lib/go/src/runtime/proc.go:183
  75. // runtime.goexit
  76. // /usr/lib/go/src/runtime/asm_amd64.s:2086
  77. }
  78. func ExampleWrap() {
  79. cause := errors.New("whoops")
  80. err := errors.Wrap(cause, "oh noes")
  81. fmt.Println(err)
  82. // Output: oh noes: whoops
  83. }
  84. func fn() error {
  85. e1 := errors.New("error")
  86. e2 := errors.Wrap(e1, "inner")
  87. e3 := errors.Wrap(e2, "middle")
  88. return errors.Wrap(e3, "outer")
  89. }
  90. func ExampleCause() {
  91. err := fn()
  92. fmt.Println(err)
  93. fmt.Println(errors.Cause(err))
  94. // Output: outer: middle: inner: error
  95. // error
  96. }
  97. func ExampleWrap_extended() {
  98. err := fn()
  99. fmt.Printf("%+v\n", err)
  100. // Example output:
  101. // error
  102. // github.com/pkg/errors_test.fn
  103. // /home/dfc/src/github.com/pkg/errors/example_test.go:47
  104. // github.com/pkg/errors_test.ExampleCause_printf
  105. // /home/dfc/src/github.com/pkg/errors/example_test.go:63
  106. // testing.runExample
  107. // /home/dfc/go/src/testing/example.go:114
  108. // testing.RunExamples
  109. // /home/dfc/go/src/testing/example.go:38
  110. // testing.(*M).Run
  111. // /home/dfc/go/src/testing/testing.go:744
  112. // main.main
  113. // /github.com/pkg/errors/_test/_testmain.go:104
  114. // runtime.main
  115. // /home/dfc/go/src/runtime/proc.go:183
  116. // runtime.goexit
  117. // /home/dfc/go/src/runtime/asm_amd64.s:2059
  118. // github.com/pkg/errors_test.fn
  119. // /home/dfc/src/github.com/pkg/errors/example_test.go:48: inner
  120. // github.com/pkg/errors_test.fn
  121. // /home/dfc/src/github.com/pkg/errors/example_test.go:49: middle
  122. // github.com/pkg/errors_test.fn
  123. // /home/dfc/src/github.com/pkg/errors/example_test.go:50: outer
  124. }
  125. func ExampleWrapf() {
  126. cause := errors.New("whoops")
  127. err := errors.Wrapf(cause, "oh noes #%d", 2)
  128. fmt.Println(err)
  129. // Output: oh noes #2: whoops
  130. }
  131. func ExampleErrorf_extended() {
  132. err := errors.Errorf("whoops: %s", "foo")
  133. fmt.Printf("%+v", err)
  134. // Example output:
  135. // whoops: foo
  136. // github.com/pkg/errors_test.ExampleErrorf
  137. // /home/dfc/src/github.com/pkg/errors/example_test.go:101
  138. // testing.runExample
  139. // /home/dfc/go/src/testing/example.go:114
  140. // testing.RunExamples
  141. // /home/dfc/go/src/testing/example.go:38
  142. // testing.(*M).Run
  143. // /home/dfc/go/src/testing/testing.go:744
  144. // main.main
  145. // /github.com/pkg/errors/_test/_testmain.go:102
  146. // runtime.main
  147. // /home/dfc/go/src/runtime/proc.go:183
  148. // runtime.goexit
  149. // /home/dfc/go/src/runtime/asm_amd64.s:2059
  150. }
  151. func Example_stackTrace() {
  152. type stackTracer interface {
  153. StackTrace() errors.StackTrace
  154. }
  155. err, ok := errors.Cause(fn()).(stackTracer)
  156. if !ok {
  157. panic("oops, err does not implement stackTracer")
  158. }
  159. st := err.StackTrace()
  160. fmt.Printf("%+v", st[0:2]) // top two frames
  161. // Example output:
  162. // github.com/pkg/errors_test.fn
  163. // /home/dfc/src/github.com/pkg/errors/example_test.go:47
  164. // github.com/pkg/errors_test.Example_stackTrace
  165. // /home/dfc/src/github.com/pkg/errors/example_test.go:127
  166. }
  167. func ExampleCause_printf() {
  168. err := errors.Wrap(func() error {
  169. return func() error {
  170. return errors.Errorf("hello %s", fmt.Sprintf("world"))
  171. }()
  172. }(), "failed")
  173. fmt.Printf("%v", err)
  174. // Output: failed: hello world
  175. }