Этап 4 из 7 · ≈ 4 ч

Ошибки

Основа с Junior

Ошибки как значения, оборачивание, errors.Is и errors.As, panic и recover.

Что важно знать

  • Ошибка — значение, проверяется явно.
  • fmt.Errorf("загрузка заказа %d: %w", id, err).
  • errors.Is — сравнение с эталоном, errors.As — извлечение типа.
  • panic и recover — не для обычных ошибок.

Критерии освоения

Junior ≈ 4 ч

  • Возвращает и проверяет ошибки, оборачивает их с контекстом через %w

Практика. Добавить обработку ошибок с контекстом во все слои учебного сервиса.

Middle ≈ 2 ч

  • Использует errors.Is и errors.As и свои типы ошибок; panic — только для невозможных ситуаций

Практика. Ввести типизированные ошибки домена и переводить их в коды HTTP в одном месте.

Проверка знаний

Войдите, чтобы пройти тест: сданный тест отмечает тему пройденной на карте и в ИПР.

Вопросы с собеседований

Смотреть все
Как в Go обрабатывают ошибки и зачем нужны errors.Is, errors.As и %w?Junior

Ошибка — обычное значение типа error, которое функция возвращает последним: if err != nil { return ... }. Оборачивают с контекстом через fmt.Errorf("...: %w", err). Проверяют errors.Is (совпадение с конкретной ошибкой в цепочке) и errors.As (найти ошибку…

Полный разбор
Когда в Go используют panic и как работает recover?Junior

panic — для невозможных ситуаций и ошибок программиста (выход за границы, nil-указатель, нарушенный инвариант), а не для ожидаемых ошибок. Panic раскручивает стек, выполняя defer. recover внутри отложенной функции останавливает панику и возвращает её значение.

Полный разбор
Как работает defer и в каком порядке выполняются отложенные вызовы?Junior

defer откладывает вызов до выхода из функции — при обычном return и при panic. Отложенные вызовы выполняются в порядке LIFO (последний — первым). Аргументы вычисляются сразу в момент defer, а не при выполнении. Через именованные результаты defer может…

Полный разбор
Почему интерфейс с nil-указателем внутри не равен nil?Middle

Интерфейсное значение — пара (тип, значение). Оно равно nil, только когда обе части nil. Если положить в интерфейс nil-указатель конкретного типа, тип уже заполнен — интерфейс не nil, и err != nil срабатывает.

Полный разбор
Как создавать свои ошибки в Go — сигнальные ошибки и типы ошибок?Junior

Сигнальная ошибка — переменная пакета var ErrNotFound = errors.New("not found"): вызывающий проверяет её через errors.Is. Тип ошибки — структура с методом Error() string, когда нужно передать данные (поле, код, id): проверяют через errors.As. Добавлять…

Полный разбор

← Вся карта «Go»

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования