я не помню, когда точно появилась в errgroup поддержка лимитов (смотри SetLimit и TryGo), но я точно этот момент упустил. Много лет использовал свой собственный враппер до этого, который добавлял туда семафор и все прочее, необходимое для ограничения конкурентности.
Если вы тоже в танке, то теперь это все можно
https://medium.com/@yardenlaif/go-sync-or-go-home-errgroup-f91a0ee72d3fЗадание ему лимита гарантирует, что не больше n горутин будут запущены одновременно, когда мы вызываем eg.Go. У этого есть ожидаемый, с одной стороны, но неконцептуальный с другой, эффект, когда вызов этой Go функции может блокироваться. Т.е. понятно почему, но с точки зрения семантики запуска горутин это немного необычно.
На всякий случай, для тех, кто от темы далек - errgroup простой это способ организации выполнения конкурентных задач в Go. По сути, это обертка над каналами, контекстами и горутинами, превращающая эти, относительно низкоуровневые примитивы, в нечто, чем можно пользоваться почти не напрягая извилины мозга.