sync.WaitGroup — счётчик для ожидания завершения группы горутин. Три метода: Add(n) — увеличить счётчик, Done() — уменьшить на 1, Wait() — блокироваться до нуля.
var wg sync.WaitGroup
for i := 0; i < 5; i++ {
wg.Add(1)
go func() {
defer wg.Done()
// работа
}()
}
wg.Wait() // ждём все 5 горутин
Важно: Add вызывай до запуска горутины, не внутри. Иначе Wait может вернуться раньше, чем горутина начнёт работу.