Ответ
WaitGroup в Go — это механизм синхронизации из пакета sync, который позволяет дождаться завершения группы горутин.
Основные методы:
Add(delta int)— увеличивает счетчик наdelta(обычно на 1 при запуске горутины).Done()— уменьшает счетчик на 1 (вызывается в конце горутины).Wait()— блокирует выполнение, пока счетчик не станет 0.
Пример:
var wg sync.WaitGroup
for i := 0; i < 3; i++ {
wg.Add(1)
go func(id int) {
defer wg.Done()
fmt.Printf("Goroutine %d donen", id)
}(i)
}
wg.Wait() // Ждем завершения всех горутин
fmt.Println("All goroutines finished")
⚠️ Важно:
Add()нужно вызывать до запуска горутины.Done()лучше вызывать черезdefer, чтобы не пропустить его при панике.- Нельзя использовать
WaitGroupповторно без сброса счетчика.