Горутина стартует с маленьким стеком (несколько КБ). Перед каждым вызовом функции компилятор вставляет проверку: хватит ли стека? Если нет — рантайм аллоцирует стек в два раза больше, копирует старый, обновляет все указатели на стек и продолжает. Это называется copyable stacks. Раньше использовали segmented stacks, но от них отказались из-за hot split проблемы.