Где создаются переменные, объявленные в функции

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

Ответ

Переменные, объявленные в функции, создаются в стеке (stack memory). Стек — это область памяти, которая управляется автоматически: память выделяется при входе в функцию и освобождается при выходе из неё.

Пример:

func foo() {
    x := 42  // `x` создаётся в стеке
    fmt.Println(x)
}  // `x` уничтожается при выходе из функции

Если переменная захватывается замыканием или передаётся по ссылке (например, через указатель или интерфейс), компилятор может переместить её в кучу (heap), чтобы она жила дольше функции.

func bar() *int {
    y := 100  // `y` может быть перемещён в кучу
    return &y // из-за возврата указателя
}

Вывод:

  • Обычные локальные переменные → стек.
  • Если переменная должна пережить функцию → куча (решает компилятор).