Недавно была статья про обработку ошибок в дефер функциях.
Так вот, в целом всё ок, вот только возвращать слайс ошибок это тупо, потому что сам по себе он не имплементирует интерфейс error. Это значит что вы не сможете его обернуть дальше, и работать с ним как с ошибкой.
Выход: сделать кастомный тип, который будет представлять из себя стек ошибок. В дефере проверять именованную ошибку, и если она не nil, пушить её в стек, дальше пушить ошибку с дефера если она есть. Возвращать стек, который имплементит интерфейс error.
https://trstringer.com/golang-deferred-function-error-handling/