🔴 Сложный · 3 очк. defer, panic, recover
Что вернёт recover() при вызове panic("oops")?
A error с текстом "oops"
B Строку "oops" (тип any)
C nil
D panic нельзя вызвать со строкой
Объяснение вопроса

recover() возвращает значение типа any, переданное в panic(). При panic("oops") вернётся строка "oops".

Примеры

defer func() {
    r := recover()
    fmt.Printf("%T %v
", r, r)
}()

panic("oops")
// string oops

panic(42)
// int 42

Проверка типа

Поскольку возвращается any, нужна проверка типа:

if r := recover(); r != nil {
    if err, ok := r.(error); ok {
        log.Printf("error: %v", err)
    } else {
        log.Printf("panic: %v", r)
    }
}

Если паники не было, recover() возвращает nil. Вызов вне defer тоже даёт nil.

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