Что такое захват переменной

«Что такое захват переменной» — вопрос из категории Golang, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Захват переменной (variable capture) в Go происходит в замыканиях (closures), когда анонимная функция использует переменные из окружающей её области видимости. Эти переменные сохраняются даже после выхода из внешней функции.

func main() {
    a := 1
    f := func() {
        fmt.Println(a) // захватываем переменную a
    }
    a = 2
    f() // выведет 2, а не 1
}

Важные особенности:

  • Захваченные переменные хранятся в куче (heap), а не на стеке
  • Изменения переменной после создания замыкания будут видны внутри него
  • В цикле захватывается последнее значение переменной (если не передать её как параметр)