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

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

Почему только в defer

При панике выполнение идёт "назад" по стеку, и по пути вызываются отложенные функции. Только в этом контексте recover() может перехватить значение паники. В обычном коде вызов recover() всегда возвращает nil.

func safeCall(f func()) (err interface{}) {
    defer func() {
        err = recover()
    }()
    f()
    return nil
}

safeCall(func() { panic("oops") })
// err будет "oops"

Возвращаемое значение

  • Если паники не было - recover() возвращает nil
  • Если была panic(x) - возвращается x (тип any)

Тип переданного значения проверяют через type assertion: if s, ok := r.(string); ok { ... }.

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