Ответ
Горутина в Go — это легковесный поток, управляемый рантаймом. Её начальный размер стека — 2 КБ (можно изменить через runtime/debug.SetMaxStack).
Основные моменты:
- Стек горутины динамически растёт/уменьшается (до 1 ГБ по умолчанию).
- Память под стек выделяется в куче.
- Дополнительные затраты: планировщик (~2 КБ на горутину), каналы, defer-вызовы и т.д.
Пример с измерением:
var before, after runtime.MemStats
runtime.ReadMemStats(&before)
go func() {}()
runtime.ReadMemStats(&after)
fmt.Printf("≈%d bytesn", after.TotalAlloc - before.TotalAlloc)
Итог: Минимальный вес — ~2-4 КБ, но реальное потребление зависит от использования.