В исходнике fmt не импортирован, поэтому программа не компилируется. После включения импорта вывод будет 2, затем 1.
Определите вывод программы
В исходнике fmt не импортирован, поэтому программа не компилируется. После включения импорта вывод будет 2, затем 1.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Укажите, какой текст будет выведен при выполнении следующей программы на Go.
package main
// import "fmt"
func main() {
{
defer fmt.Println(1)
}
defer fmt.Println(2)
}
Ответ
В исходнике fmt не импортирован, поэтому программа не компилируется. После включения импорта вывод будет 2, затем 1.
Область действия defer — окружающая функция, а не блок фигурных скобок. Выход из внутреннего блока не вызывает отложенную печать 1.
Оба вызова накапливаются до завершения main и выполняются в обратном порядке регистрации. Если нужно выполнить отложенное действие при завершении отдельного участка, этот участок оформляют отдельной функцией и вызывают её; обычный блок не создаёт собственный стек defer.