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

defer меняет именованный результат

Вопрос

Что вернёт f()?

func f() (n int) {
    defer func() { n *= 2 }()
    return 10
}

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

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

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

Коротко

Правильный ответ: 20. return 10 сначала присваивает результату n значение 10, затем выполняются отложенные функции, и только потом функция возвращает.

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

  1. 10
  2. 0
  3. 20правильный ответ
  4. 11

Разбор

return 10 сначала присваивает результату n значение 10, затем выполняются отложенные функции, и только потом функция возвращает. Замыкание в defer видит именованный результат и умножает его на 2. Если бы результат был безымянным, defer не смог бы его поменять.

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

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

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