Sobes.tech
Back to questions
Junior — Middle
113

Можете объяснить, как используется механизм ожидания завершения нескольких горутин в Go с помощью WaitGroup?

Companies where asked
AvitoAvito
OZONOZON
HyperRus

Answer from AI

sobes.tech AI

В Go для ожидания завершения нескольких горутин используется тип sync.WaitGroup. Он позволяет "подписаться" на несколько горутин и блокировать выполнение до тех пор, пока все они не завершатся.

Основные методы WaitGroup:

  • Add(n int) — увеличивает счетчик на n, обычно вызывается перед запуском горутин.
  • Done() — уменьшает счетчик на 1, вызывается в конце каждой горутины.
  • Wait() — блокирует выполнение до тех пор, пока счетчик не станет 0.

Пример использования:

var wg sync.WaitGroup

wg.Add(3) // ожидаем 3 горутины

for i := 0; i < 3; i++ {
    go func(id int) {
        defer wg.Done() // сигнализируем о завершении
        fmt.Printf("Горутина %d выполняется\n", id)
        // какая-то работа
    }(i)
}

wg.Wait() // ждем завершения всех горутин
fmt.Println("Все горутины завершены")