Обработка ошибок в Go основана на явных возвращаемых значениях ошибок, а не на исключениях. Этот подход имеет несколько ключевых характеристик:
-
Явные возвраты ошибок: Функции, которые могут завершиться неудачей, возвращают ошибку в качестве своего последнего возвращаемого значения (func DoSomething() (result T, err error)).
-
Нет исключений: В Go нет блоков try/catch. Ошибки обрабатываются немедленно там, где они возникают.
-
Интерфейс ошибки: Интерфейс error прост: type error interface { Error() string }. Любой тип, реализующий этот интерфейс, может быть ошибкой.
-
Рекомендации:
-
Всегда проверяйте ошибки сразу после вызова функций.
-
Постоянно используйте шаблон if err != nil.
-
Добавьте контекст к ошибкам, используя fmt.Errorf с глаголом %w для переноса.
-
Создавайте собственные типы ошибок для конкретных случаев ошибок.
-
Используйте errors.Is и errors.As для проверки ошибок и подтверждения типа.
-
Рассмотрите возможность использования defer для операций очистки, которые могут завершиться неудачей.
-
Документируйте, какие ошибки может возвращать функция.
Итог
Обработка ошибок в Go основана на явных возвращаемых значениях ошибок, а не на исключениях.