По порядку Middle Ошибки, defer, panic и recover обновлено
Что происходит при return с defer
Вопрос
Функция func f() (n int) содержит defer и выполняет return 5. Расставьте шаги в порядке выполнения.
Попробуйте сами
Расставьте шаги по порядку стрелками.
- 1Значение присваивается именованному результату n
- 2Выполняются отложенные функции в обратном порядке
- 3Функция возвращает текущее значение n вызывающему
- 4Вычисляется выражение после return (5)
Показать ответ и разбор
Коротко
return с выражением не атомарен: сначала результат записывается, потом работают defer (и могут его изменить), и только затем управление возвращается. Поэтому defer умеет менять именованные результаты.
Правильный порядок
- 1Вычисляется выражение после return (5)
- 2Значение присваивается именованному результату n
- 3Выполняются отложенные функции в обратном порядке
- 4Функция возвращает текущее значение n вызывающему
Разбор
return с выражением не атомарен: сначала результат записывается, потом работают defer (и могут его изменить), и только затем управление возвращается. Поэтому defer умеет менять именованные результаты.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.