Каждая горутина стартует с маленьким стеком — обычно 2-8 КБ. Когда стеку не хватает места, Go рантайм автоматически его увеличивает. Раньше использовались segmented stacks, сейчас — contiguous (непрерывные): Go выделяет новый стек побольше, копирует туда всё содержимое и обновляет указатели. Это позволяет запускать миллионы горутин, потому что каждая потребляет минимум памяти и растёт только по необходимости.