Skip to content
This repository has been archived by the owner on Dec 1, 2021. It is now read-only.

How to check if an error is wrapped or is original #210

Open
xxjapp opened this issue Sep 5, 2019 · 6 comments
Open

How to check if an error is wrapped or is original #210

xxjapp opened this issue Sep 5, 2019 · 6 comments

Comments

@xxjapp
Copy link

xxjapp commented Sep 5, 2019

Need method to check if error is wrapped

@davecheney
Copy link
Member

davecheney commented Sep 5, 2019

If you had that method, what would that enable you to do? Why is it important for your program to be able to detect if an error value wraps another?

@xxjapp
Copy link
Author

xxjapp commented Sep 7, 2019

@davecheney

If I had the method, I could differentiate wrapped errors with call stack information and original errors without call stack information. For original errors I could add some call stack information by myself.

@xxjapp
Copy link
Author

xxjapp commented Sep 7, 2019

For wrapped errors, I think there is no need to wrap it again when wrapping error from other's source.

@puellanivis
Copy link

In general, either a source should guarantee that all of its errors are wrapped, or none of them are.
If you absolutely must work with a broken design, then the following code does what you want it to do. Writing a helper function to do the same would save you no complexity:

if causer, ok := err.(interface{ Cause() error }); ok {
  // value is wrapped
}

@xxjapp
Copy link
Author

xxjapp commented Sep 8, 2019

@puellanivis

Thank you for your detailed answer. For some reasons, I have to work with such a broken design from legacy source.

@puellanivis
Copy link

Tech Debt… we meet again old friend…

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants