🔴 Сложный · 3 очк. Разное / продвинутое
Что произойдёт при panic(nil)?
A Ничего
B Программа завершится с panic
C Ошибка компиляции
D recover() вернёт nil
Объяснение вопроса

Вызов panic(nil) по-прежнему запускает панику и раскрутку стека. Раньше recover() возвращал nil, и нельзя было отличить "паники не было" от "была panic(nil)".

Изменение в Go 1.21

Начиная с Go 1.21, при panic(nil) runtime подменяет значение на *runtime.PanicNilError. Поэтому recover() больше не вернёт nil - можно надёжно обработать такой случай.

defer func() {
    if r := recover(); r != nil {
        // r будет *runtime.PanicNilError при panic(nil)
        fmt.Printf("panic: %v\n", r)
    }
}()
panic(nil)

Рекомендация

Передавайте в panic() осмысленное значение (строку или ошибку), чтобы упростить отладку: panic("неожиданный nil") или panic(err).

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