Три способа. Buffered channel как семафор: sem := make(chan struct{}, maxWorkers), sem <- struct{}{} перед запуском, <-sem после. Worker pool: фиксированное число горутин читают задачи из канала. errgroup.SetLimit(n): g.SetLimit(10), g.Go(func() error {...}) — не запустит больше 10 одновременно. Для простых случаев хватает семафора, для обработки ошибок — errgroup, для долгоживущих задач — worker pool. Не забывай про context для отмены.
Как ограничить параллелизм?
Middle
288 просмотровAFK Offer AI
Как писать commit message?