Стек горутины начинается с 2-8 КБ (зависит от версии Go). Для сравнения, стек OS-потока — обычно 1-8 МБ. Стек горутины растёт динамически — при нехватке Go аллоцирует новый стек в 2 раза больше и копирует данные.
Структура горутины (runtime.g) занимает ~400 байт. Итого на создание горутины нужно ~2-8 КБ + метаданные — именно поэтому можно запускать миллионы горутин.
Heap используется для данных, которые «убегают» (escape analysis). GC Go — concurrent, tri-color mark-and-sweep с паузами < 1мс. Для уменьшения аллокаций используй sync.Pool и предаллокацию слайсов.