Назад к вопросам
МТС Digital
Junior — Middle
88
Что произойдет с аргументами функции, переданными в defer, при ее выполнении?
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
В Go при использовании defer аргументы функции, переданной в defer, вычисляются сразу в момент объявления defer, а сама функция вызывается позже, когда окружающая функция завершает выполнение.
Это значит, что если аргументы изменяются после defer, то в отложенном вызове будет использовано именно то значение, которое было на момент defer.
Пример:
func example() {
x := 10
defer fmt.Println(x) // аргумент x фиксируется как 10
x = 20
}
// При выходе из example будет выведено 10, а не 20
Таким образом, defer сохраняет копии аргументов при объявлении.