Выбор ответа Junior Ошибки, defer, panic и recover спрашивают часто обновлено

Когда вычисляются аргументы defer

Вопрос

Что выведет код?

x := 1
defer fmt.Println(x)
x = 2

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: 1. Аргументы отложенного вызова вычисляются в момент выполнения оператора defer, а сама функция вызывается при выходе.

Варианты ответа

  1. 2
  2. 1правильный ответ
  3. 0
  4. Ничего

Разбор

Аргументы отложенного вызова вычисляются в момент выполнения оператора defer, а сама функция вызывается при выходе. На момент defer x = 1, это значение и сохранилось. Чтобы увидеть итоговое значение, используют замыкание: defer func() { fmt.Println(x) }().

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме