Определите вывод программы

В исходнике 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.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее