Go Errors & Panic: defer, recover и устойчивый код

Разберётесь с ошибками в Go как система: %w и цепочки, errors.Is/As/Join, defer без ловушек, panic и recover по назначению, устойчивые конвейеры с повторами и частичным успехом.

Чему вы научитесь

Ошибка исчезла, а программа сообщает об успехе

Defer закрывает ресурс и по дороге затирает ошибку записи: вызывающий код получает nil вместо disk full. В курсе такие случаи разбираются по уликам: что видно в выводе, в какой строке причина, какая правка возвращает ошибку.

Решение вы пишете полной программой на Go, проверка прогоняет её на тестах с краевыми случаями.

recover работает не там, где кажется

Из пяти способов вызвать recover панику останавливают два: вызов прямо из отложенной функции и обёртка defer func() { recover() }(). Запись defer recover() в таком виде её не гасит, а вызов из обычного кода возвращает nil.

На этом строится safeCall: паника внутри функции становится обычной ошибкой, а вы проверяете, где такая защита не помогает.

Конвейер, который не падает из-за одной записи

В финале вы собираете обработку партии: паника в одной записи превращается в ошибку, остальные идут дальше, повторяются только временные ошибки, а итоговый отчёт показывает, что прошло и что защита не закрывает.

Каждая проверка в курсе сообщает, что именно не совпало: ожидаемый и ваш вывод рядом.

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

Базовый Go: функции, структуры, срезы, map, методы и интерфейсы на уровне «понимаю, что это».

Горутины и каналы встречаются в двух последних модулях, нужный минимум объяснён там же.

Ставить ничего не нужно: решения пишутся и проверяются в браузере.

Для кого

Go-разработчикам, у которых в коде встречается if err != nil { return err } и которые хотят понимать, что теряется на пути вверх по стеку.

Тем, кто ловил панику в продакшене и хочет знать, где recover уместен, а где он прячет дефект.

Разработчикам из языков с исключениями: здесь показано, как в Go устроена обработка сбоев без try и catch.

Поддержка

Вопросы по курсу можно задать поддержке в Telegram: t.me/mentorix_support.

Программа курса

Модулей: 5, уроков: 21. Задачи с кодом проверяются автоматически.

  1. Ошибки как значения

  2. errors.Is, errors.As и свои типы

  3. defer: гарантии при выходе

  4. panic и recover

  5. Устойчивый код

Стоимость курса: 2990 ₽

Открыть курс на Mentorix · Все курсы