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