6 вопросов
Go использует явную обработку ошибок через возвращаемые значения вместо исключений. errors.Is, errors.As, оборачивание через %w - ключевые инструменты работы с ошибками.
Go использует явную обработку ошибок через возвращаемые значения, а не исключения. Идиоматический паттерн: result, err := f(); if err != nil { return err }. Нет try/catch - это сознательное решение дизайнеров Go.
Подробнее →errors.Is(err, target)? 🟡 Средний
▶
errors.Is рекурсивно проходит по цепочке обёрнутых ошибок (через Unwrap()) и сравнивает каждую с target. Это надёжнее, чем err == target, потому что работает с обёрнутыми ошибками.
Подробнее →Глагол %w в fmt.Errorf оборачивает ошибку, сохраняя цепочку. Обёрнутую ошибку можно проверить через errors.Is и errors.As. Глагол %v только добавляет текст, но теряет связь с оригинальной ошибкой.
Подробнее →errors.As(err, &target)? 🟡 Средний
▶
errors.As ищет в цепочке ошибку определённого типа и записывает её в target. Полезно для получения дополнительных данных из кастомных ошибок.
Подробнее →errors.New("сообщение") создаёт новое значение, реализующее интерфейс error. Для форматированных ошибок: fmt.Errorf("ошибка: %v", details). В Go нет конструкций new Error() (JavaScript) или throw (Java).
Подробнее →Интерфейс error содержит один метод: Error() string. Любой тип с этим методом является ошибкой. Можно создать свой тип ошибки с дополнительными полями.
Подробнее →