Ответ
Стек в Go растет динамически, начиная с небольшого размера (обычно 2 КБ). При нехватке места выделяется новый стек большего размера, содержимое копируется, а указатели обновляются. Это позволяет избежать переполнения, но может вызывать паузы из-за копирования.
Пример:
func recursive(n int) {
if n == 0 { return }
recursive(n-1)
}
Вызов recursive(1000000) не приведет к stack overflow, но может быть неэффективным. В отличие от кучи, стек управляется runtime и освобождается автоматически при выходе из функции.