Ответ
Захват переменной (variable capture) в Go происходит в замыканиях (closures), когда анонимная функция использует переменные из окружающей её области видимости. Эти переменные сохраняются даже после выхода из внешней функции.
func main() {
a := 1
f := func() {
fmt.Println(a) // захватываем переменную a
}
a = 2
f() // выведет 2, а не 1
}
Важные особенности:
- Захваченные переменные хранятся в куче (heap), а не на стеке
- Изменения переменной после создания замыкания будут видны внутри него
- В цикле захватывается последнее значение переменной (если не передать её как параметр)