Выбор ответа Middle Ошибки, defer, panic и recover спрашивают часто обновлено
defer меняет именованный результат
Вопрос
Что вернёт f()?
func f() (n int) {
defer func() { n *= 2 }()
return 10
}
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: 20. return 10 сначала присваивает результату n значение 10, затем выполняются отложенные функции, и только потом функция возвращает.
Варианты ответа
10020правильный ответ11
Разбор
return 10 сначала присваивает результату n значение 10, затем выполняются отложенные функции, и только потом функция возвращает. Замыкание в defer видит именованный результат и умножает его на 2. Если бы результат был безымянным, defer не смог бы его поменять.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.