OLD | NEW |
1 // Copyright 2016 The LUCI Authors. All rights reserved. | 1 // Copyright 2016 The LUCI Authors. All rights reserved. |
2 // Use of this source code is governed under the Apache License, Version 2.0 | 2 // Use of this source code is governed under the Apache License, Version 2.0 |
3 // that can be found in the LICENSE file. | 3 // that can be found in the LICENSE file. |
4 | 4 |
5 package errors | 5 package errors |
6 | 6 |
7 import ( | 7 import ( |
8 "fmt" | 8 "fmt" |
9 ) | 9 ) |
10 | 10 |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
43 } | 43 } |
44 return err | 44 return err |
45 } | 45 } |
46 | 46 |
47 func someIntermediateFunc(vals ...int) error { | 47 func someIntermediateFunc(vals ...int) error { |
48 errch := make(chan error) | 48 errch := make(chan error) |
49 go func() { | 49 go func() { |
50 defer close(errch) | 50 defer close(errch) |
51 errch <- Annotate(errorWrapper(someLibFunc(vals...))).Reason("co
uld not process").Err() | 51 errch <- Annotate(errorWrapper(someLibFunc(vals...))).Reason("co
uld not process").Err() |
52 }() | 52 }() |
53 » if err := MultiErrorFromErrors(errch); err != nil { | 53 » me := MultiError(nil) |
54 » » return Annotate(err).Reason("while processing %(vals)v").D("vals
", vals).Err() | 54 » for err := range errch { |
| 55 » » if err != nil { |
| 56 » » » me = append(me, err) |
| 57 » » } |
| 58 » } |
| 59 » if me != nil { |
| 60 » » return Annotate(me).Reason("while processing %(vals)v").D("vals"
, vals).Err() |
55 } | 61 } |
56 return nil | 62 return nil |
57 } | 63 } |
58 | 64 |
59 func ExampleAnnotate() { | 65 func ExampleAnnotate() { |
60 if err := someIntermediateFunc(3); err != nil { | 66 if err := someIntermediateFunc(3); err != nil { |
61 err = Annotate(err).Reason("top level").Err() | 67 err = Annotate(err).Reason("top level").Err() |
62 fmt.Println("Public-facing error:\n ", err) | 68 fmt.Println("Public-facing error:\n ", err) |
63 fmt.Println("\nfull error:") | 69 fmt.Println("\nfull error:") |
64 for _, l := range FixForTest(RenderStack(err).ToLines("runtime",
"_test")) { | 70 for _, l := range FixForTest(RenderStack(err).ToLines("runtime",
"_test")) { |
(...skipping 30 matching lines...) Expand all Loading... |
95 // MultiError 1/1: following first non-nil error. | 101 // MultiError 1/1: following first non-nil error. |
96 // "non-nil" = 1 | 102 // "non-nil" = 1 |
97 // "total" = 1 | 103 // "total" = 1 |
98 // | 104 // |
99 // #? github.com/luci/luci-go/common/errors/annotate_example_test.go:51
- errors.someIntermediateFunc.func1() | 105 // #? github.com/luci/luci-go/common/errors/annotate_example_test.go:51
- errors.someIntermediateFunc.func1() |
100 // reason: "could not process" | 106 // reason: "could not process" |
101 // | 107 // |
102 // ... skipped SOME frames in pkg "runtime"... | 108 // ... skipped SOME frames in pkg "runtime"... |
103 // | 109 // |
104 // GOROUTINE LINE | 110 // GOROUTINE LINE |
105 » // #? github.com/luci/luci-go/common/errors/annotate_example_test.go:54
- errors.someIntermediateFunc() | 111 » // #? github.com/luci/luci-go/common/errors/annotate_example_test.go:60
- errors.someIntermediateFunc() |
106 // reason: "while processing [3]" | 112 // reason: "while processing [3]" |
107 // "vals" = []int{3} | 113 // "vals" = []int{3} |
108 // | 114 // |
109 » // #? github.com/luci/luci-go/common/errors/annotate_example_test.go:60
- errors.ExampleAnnotate() | 115 » // #? github.com/luci/luci-go/common/errors/annotate_example_test.go:66
- errors.ExampleAnnotate() |
110 // reason: "top level" | 116 // reason: "top level" |
111 // | 117 // |
112 // #? testing/example.go:XXX - testing.runExample() | 118 // #? testing/example.go:XXX - testing.runExample() |
113 // #? testing/example.go:XXX - testing.runExamples() | 119 // #? testing/example.go:XXX - testing.runExamples() |
114 // #? testing/testing.go:XXX - testing.(*M).Run() | 120 // #? testing/testing.go:XXX - testing.(*M).Run() |
115 // ... skipped SOME frames in pkg "_test"... | 121 // ... skipped SOME frames in pkg "_test"... |
116 // ... skipped SOME frames in pkg "runtime"... | 122 // ... skipped SOME frames in pkg "runtime"... |
117 | |
118 } | 123 } |
OLD | NEW |