Что такое WaitGroup в Go

«Что такое WaitGroup в Go» — вопрос из категории Golang, который задают на 33% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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 повторно без сброса счетчика.