Ответ
Стек в потоках (горутинах в Go) выделяется индивидуально для каждого потока. Это позволяет потокам хранить локальные переменные, адреса возврата из функций и другие данные вызовов независимо от других потоков.
В Go каждая горутина начинается с небольшого стека (обычно 2KB), который динамически растёт/сжимается по мере необходимости (до 1GB). Это отличается от традиционных потоков ОС, где стек фиксированного размера выделяется заранее.
Пример:
func foo() {
x := 42 // локальная переменная в стеке горутины
println(x)
}
func main() {
go foo() // запуск в новой горутине со своим стеком
time.Sleep(time.Millisecond)
}