🟡 Средний · 2 очк. defer, panic, recover
Где нужно вызывать recover()?
A В main()
B В defer-функции
C В горутине
D В любом месте
Объяснение вопроса

recover() имеет эффект только внутри отложенной (deferred) функции. Вызов в обычном коде всегда возвращает nil.

Типичный паттерн

defer func() {
    if r := recover(); r != nil {
        log.Printf("panic recovered: %v", r)
    }
}()

doRiskyWork()

Анонимная функция вызывается при выходе из окружающей функции (нормальном или из-за паники). Внутри неё recover() возвращает значение паники или nil.

Частая ошибка

defer recover()           // бесполезно: recover() вызывается "сейчас", не в defer-контексте
defer fmt.Println(recover())  // тоже не то: аргумент вычисляется при регистрации defer

Нужна именно defer func() { ... recover() ... }() - вызов recover() должен произойти при выполнении отложенной функции.

🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.