А вот эта штука лично у меня, вызывает ряд вопросов. Похоже, она довольно популярна в мире Go, и на вопрос “а как мне к ошибкам приложить стек трейс” часто отвечают - просто используй https://github.com/rotisserie/eris



Лично мне идея добавлять (упаковывать) трейс в ошибку кажется сомнительной по двум причинам - во первых брать трейс на ошибку это дорого, и в большинстве случаев это не надо. Проблема в том, что заранее непонятно какие надо так врапить а какие не надо. Во вторых, концептуально стек вызова который довел до ошибки, это, на мой взгляд, не про ошибку, но про логинг ошибок.



Для себя я это решаю иначе, и моя микро-библиотека логинга https://github.com/go-pkgz/lgr показывает стек трейсы на те ошибки, уровень которых выбран пользователем. Т.е. раскручивание стека происходит в момент логирования, а не в момент самой ошибки.



Несомненно, мой подход более ограничен, и ему, например, не раскрутить стек ошибки из горутины, но, с другой сторону, ловить ошибки из горутин это экзотика, и если удастся получить стек на тот момент когда происходит некий err := gr.Wait() то это достаточно близко, на мой вкус.