Буферизованный канал ёмкостью n: отправка - захват, приём - освобождение. Ограничивает число одновременных операций до n.
sem := make(chan struct{}, 10) sem <- struct{}{} defer func() { <-sem }()