В программировании термин «захват переменной» (variable capture) означает, что функция или замыкание сохраняет доступ к переменным из внешней области видимости, даже после того, как эта область уже завершила своё выполнение.
Зависит ли проблема захвата переменной цикла в замыкании горутины от версии Go?
Например, в Go можно создать функцию, которая возвращает другую функцию, использующую переменную из внешней функции:
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
В программировании термин «захват переменной» (variable capture) означает, что функция или замыкание сохраняет доступ к переменным из внешней области видимости, даже после того, как эта область уже завершила своё выполнение.
Например, в Go можно создать функцию, которая возвращает другую функцию, использующую переменную из внешней функции:
func makeAdder(x int) func(int) int {
return func(y int) int {
return x + y // 'x' захвачена замыканием
}
}
func main() {
addFive := makeAdder(5)
fmt.Println(addFive(3)) // Выведет 8
}
Здесь внутренняя функция «захватывает» переменную x из внешней функции makeAdder. Это позволяет сохранять состояние между вызовами и создавать более гибкие конструкции.