panics: allow usage of RecoveredPanic as a normal error #75
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Returning a concrete type
*RecoveredPanic
that implementserror
introduces an interesting gotcha - it looks like anerror
and behaves like anerror
, but cannot really be used as an error, because if returned as an error even if nil it's a typed error or something and shows up as not nil.Example using the existing implementation:
Playground example: https://go.dev/play/p/C1DAdBWY9EZ , example in practice: https://github.com/sourcegraph/controller/actions/runs/3972347286/jobs/6810164688#step:7:141
To remedy this, we can either:
(*Catcher).Recovered() *RecoveredPanic
to(*Catcher).Recovered() error
and ask that callers cast it into*RecoveredPanic
for details a laos.ExitError
error
implementation and move it to another type that can be retrieved with(*RecoveredPanic).AsError()
This PR currently implements the latter - I might prefer the former, but it's a bigger change, and the distinction between a panic and an error returned is nice.