Основы синтаксиса Строки и руны Массивы и слайсы Map Структуры и методы Интерфейсы Горутины и конкурентность Каналы defer, panic, recover Обработка ошибок Указатели Пакет sync Тестирование Пакеты и модули Стандартная библиотека Context Generics iota и перечисления Разное / продвинутое

Обработка ошибок

6 вопросов

Go использует явную обработку ошибок через возвращаемые значения вместо исключений. errors.Is, errors.As, оборачивание через %w - ключевые инструменты работы с ошибками.

1 Как правильно обработать ошибку в Go? 🟢 Лёгкий
Ответ: B) if err != nil

Go использует явную обработку ошибок через возвращаемые значения, а не исключения. Идиоматический паттерн: result, err := f(); if err != nil { return err }. Нет try/catch - это сознательное решение дизайнеров Go.

Подробнее →
2 Что делает errors.Is(err, target)? 🟡 Средний
Ответ: B) Проверяет, есть ли target в цепочке ошибок

errors.Is рекурсивно проходит по цепочке обёрнутых ошибок (через Unwrap()) и сравнивает каждую с target. Это надёжнее, чем err == target, потому что работает с обёрнутыми ошибками.

Подробнее →
3 Как обернуть ошибку с контекстом в Go 1.13+? 🟡 Средний
Ответ: B) fmt.Errorf("... %w", err)

Глагол %w в fmt.Errorf оборачивает ошибку, сохраняя цепочку. Обёрнутую ошибку можно проверить через errors.Is и errors.As. Глагол %v только добавляет текст, но теряет связь с оригинальной ошибкой.

Подробнее →
4 Что делает errors.As(err, &target)? 🟡 Средний
Ответ: B) Извлекает ошибку конкретного типа из цепочки

errors.As ищет в цепочке ошибку определённого типа и записывает её в target. Полезно для получения дополнительных данных из кастомных ошибок.

Подробнее →
5 Как создать простую ошибку? 🟢 Лёгкий
Ответ: B) errors.New("msg")

errors.New("сообщение") создаёт новое значение, реализующее интерфейс error. Для форматированных ошибок: fmt.Errorf("ошибка: %v", details). В Go нет конструкций new Error() (JavaScript) или throw (Java).

Подробнее →
6 Какой интерфейс должен реализовать тип, чтобы быть ошибкой? 🟢 Лёгкий
Ответ: B) error (метод Error() string)

Интерфейс error содержит один метод: Error() string. Любой тип с этим методом является ошибкой. Можно создать свой тип ошибки с дополнительными полями.

Подробнее →