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

defer, panic, recover

6 вопросов

Механизмы управления потоком выполнения: defer откладывает вызов до конца функции, panic вызывает аварийное завершение, recover перехватывает панику. Порядок выполнения defer - LIFO.

1 Что делает ключевое слово defer? 🟢 Лёгкий
Ответ: B) Откладывает вызов до конца функции

defer f() регистрирует вызов функции, который выполнится при выходе из текущей функции (return, panic). Часто используется для освобождения ресурсов: defer file.Close(), defer mu.Unlock().

Подробнее →
2 В каком порядке выполняются несколько defer? 🟡 Средний
Ответ: B) LIFO (последний вызван - первый выполнен)

Defer'ы складываются в стек (LIFO). Последний зарегистрированный выполняется первым. Это логично: ресурсы освобождаются в порядке, обратном получению.

Подробнее →
3 Когда вычисляются аргументы defer? 🔴 Сложный
Ответ: B) В момент вызова defer

Аргументы defer f(x) вычисляются немедленно, а вызов откладывается. Частая ловушка: defer fmt.Println(i) зафиксирует текущее значение i, даже если оно потом изменится. Используйте замыкание для актуального значения.

Подробнее →
4 Что делает recover()? 🟡 Средний
Ответ: B) Перехватывает panic

recover() останавливает распространение паники и возвращает значение, переданное в panic(). Работает только внутри defer-функции. Если паники нет, возвращает nil.

Подробнее →
5 Где нужно вызывать recover()? 🟡 Средний
Ответ: B) В defer-функции

recover() имеет эффект только внутри отложенной (deferred) функции. Вызов recover() в обычном коде всегда возвращает nil. Типичный паттерн: defer func() { if r := recover(); r != nil { log.Println(r) } }().

Подробнее →
6 Можно ли перехватить panic из другой горутины? 🔴 Сложный
Ответ: B) Нет

Каждая горутина имеет свой стек вызовов. recover() работает только в той горутине, где произошла panic. Неперехваченная паника в горутине завершает всю программу.

Подробнее →