Назад к вопросам
Avito
OZON
Junior — Middle
114
Можете объяснить, как используется механизм ожидания завершения нескольких горутин в Go с помощью WaitGroup?
Компании, где спрашивали
HyperRus
Ответ от нейросети
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("Все горутины завершены")