A cursory look at the article, shows that the most important observation about error handling in Go is missing. Errors should be "decorated" (wrapped, contextualized...) in 99% of the cases. In the end you get errors that describe step by step what your program tried to do and why it failed, for example: * could not load profile: could not open file: permission denied. * could not download profile image: could not op…
I'll overwhelmingly prefer an always-correct stacktrace over a hand-recreated one that sometimes collapses multiple branches into a single ambiguous on. At least then the devs can help me when it fails. And stack traces and concatenated strings are in no way appropriate error responses for humans unless you're expecting them to be able to navigate the source code, so neither does anything for the "provide a helpful error message for non-programmers" problem.
---
this is why stuff like https://github.com/pkg/errors exists. wrap at the deepest level / where the error originates, and it's relatively rare that you need to add context at higher levels. If you want user-friendly errors, you need something dramatically more sophisticated.