Pull to refresh

Comments 3

Привет из будущего где golang conf будет 4 июня !)

Тут слишком много букв, поэтому ничего не понятно (и много неправильно)

Как должно быть:
а) для библиотек:

  • ошибки не выводить в лог, т.к. у всех логгеры разные

  • делать "Текстовый wrapping %w" ошибок

  • все ошибки возвращать

  • не делать панику (или fatal)

б) для остальных приложений:

  • все ошибки выводить в лог сразу же в месте появления ошибки, даже если ошибку возвращаем наверх.

  • при возвращении ошибки наверх - надо ошибку вывести в лог ещё раз, второй раз с новым "Текстовый wrapping %w" ошибок

  • делать "Текстовый wrapping %w" ошибок

  • ошибки старться обработать на месте, возвращать как можно меньше ошибок

  • при старте приложения при ошибке сразу делать панику, после старта паники стараться не делать.

Статья получилось длинной соглашусь, спасибо что прочитали ее всю.

В статье я не говорю как должно быть, а показываю когда и в каких условиях нужно использовать тот или иной подход.

Дополнения к вашему варианту "Как должно быть:"


а) для библиотек:

  • ошибки не выводить в лог, т.к. у всех логгеры разные

Верно, в статье также говорится, но есть slog и стандартный пакет log, которые при определенных условиях можно применять. Примеры: net/http, gin

  • делать "Текстовый wrapping %w" ошибок

Верно, в статье также говорится, плюс я говори еще про Custom Errors, который широко используется. os.PathError

  • все ошибки возвращать

Верно, в статье также говорится, но есть исключения описанные в статье. Примеры из stdlib найдены через поиск _ = : math, strconv.

  • не делать панику (или fatal)

Верно, но есть исключения описанные в статье. Примеры из stdlib: strings, strconv.

Зачему, что исключения я описывал в статье и в самих регламентах они помечены "?" - применять при определенных условиях.

б) для остальных приложений:

  • все ошибки выводить в лог сразу же в месте появления ошибки, даже если ошибку возвращаем наверх.

Логирование по месту захламляет лог дублями и усложняет понимания реального количества ошибок, поэтому не могу советовать этого.

  • при возвращении ошибки наверх - надо ошибку вывести в лог ещё раз, второй раз с новым "Текстовый wrapping %w" ошибок

Такая же проблема, как описанная к пункту выше.

  • делать "Текстовый wrapping %w" ошибок

Так и есть в статье, плюс Custom Errors. stacktrace и backtrace я поставил как практики под "?, но для получения быстрого результата в легаси проектах этот подход приемлем.

  • ошибки старться обработать на месте, возвращать как можно меньше ошибок

Опишите примеры таких ошибок. В сервисах я встречал ошибки с валидацией данных, некорректность работой внешних ресурсов (БД, микросервис, шина данных) и это все тяжело пропустить. Но удобно обработать централизовано показывая ошибку, но скрывая чувствительную информацию от пользователю.

  • при старте приложения при ошибке сразу делать панику, после старта паники стараться не делать.

Про паники так и указано в статье.

Sign up to leave a comment.