Что важно знать
- Ошибка — значение, проверяется явно.
fmt.Errorf("загрузка заказа %d: %w", id, err).errors.Is— сравнение с эталоном,errors.As— извлечение типа.panicиrecover— не для обычных ошибок.
Ошибки как значения, оборачивание, errors.Is и errors.As, panic и recover.
fmt.Errorf("загрузка заказа %d: %w", id, err).errors.Is — сравнение с эталоном, errors.As — извлечение типа.panic и recover — не для обычных ошибок.Практика. Добавить обработку ошибок с контекстом во все слои учебного сервиса.
Практика. Ввести типизированные ошибки домена и переводить их в коды HTTP в одном месте.
Войдите, чтобы пройти тест: сданный тест отмечает тему пройденной на карте и в ИПР.
Ошибка — обычное значение типа error, которое функция возвращает последним: if err != nil { return ... }. Оборачивают с контекстом через fmt.Errorf("...: %w", err). Проверяют errors.Is (совпадение с конкретной ошибкой в цепочке) и errors.As (найти ошибку…
Полный разборpanic — для невозможных ситуаций и ошибок программиста (выход за границы, nil-указатель, нарушенный инвариант), а не для ожидаемых ошибок. Panic раскручивает стек, выполняя defer. recover внутри отложенной функции останавливает панику и возвращает её значение.
Полный разборdefer откладывает вызов до выхода из функции — при обычном return и при panic. Отложенные вызовы выполняются в порядке LIFO (последний — первым). Аргументы вычисляются сразу в момент defer, а не при выполнении. Через именованные результаты defer может…
Полный разборИнтерфейсное значение — пара (тип, значение). Оно равно nil, только когда обе части nil. Если положить в интерфейс nil-указатель конкретного типа, тип уже заполнен — интерфейс не nil, и err != nil срабатывает.
Полный разборСигнальная ошибка — переменная пакета var ErrNotFound = errors.New("not found"): вызывающий проверяет её через errors.Is. Тип ошибки — структура с методом Error() string, когда нужно передать данные (поле, код, id): проверяют через errors.As. Добавлять…
Полный разборПосле собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.