🟡 Средний · 2 очк. defer, panic, recover
Выполнятся ли deferred функции при вызове os.Exit(0)?
A Да
B Нет
C Только с кодом 0
D Зависит от ОС
Объяснение вопроса

Нет. os.Exit(code) немедленно завершает процесс, не выполняя отложенные функции (defer), не давая возможности recover и не вызывая финализаторы.

Сравнение с return и panic

defer fmt.Println("cleanup")
os.Exit(0)  // "cleanup" не выведется
// При обычном return из main() или panic - defer выполнится

log.Fatal и подобные внутри вызывают os.Exit, поэтому с ними тоже не выполняются defer'ы. Используйте os.Exit только когда освобождение ресурсов и логирование уже не нужны (например, после вывода справки по флагу).

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