This is a case in which generational GC can help. If you allocate goroutine stacks in the nursery, then you can use a bump allocator, which makes the throughput extremely fast. Throughput of allocation matters just as much as latency does!
(By the way, Rust used to cache thread stacks back when it had M:N threading, because we found that situations like this arose a lot.)