Back to questions
Junior — Middle
83
Применяли ли вы механизм синхронизации с помощью sync.WaitGroup в своих проектах?
Answer from AI
sobes.tech AI
Да, в проектах на Go часто используется sync.WaitGroup для синхронизации горутин. Этот механизм позволяет ждать завершения группы параллельных задач перед продолжением выполнения.
Принцип работы:
- Создаётся объект
WaitGroup. - Перед запуском каждой горутины вызывается
Add(1), чтобы увеличить счётчик. - Внутри горутины после завершения работы вызывается
Done(), уменьшая счётчик. - Основная горутина вызывает
Wait(), которая блокируется, пока счётчик не станет равен нулю.
Пример:
var wg sync.WaitGroup
wg.Add(2) // ожидаем 2 горутины
go func() {
defer wg.Done()
// работа первой горутины
}()
go func() {
defer wg.Done()
// работа второй горутины
}()
wg.Wait() // ждём завершения обеих
Это удобно для координации параллельных операций и предотвращения преждевременного завершения программы.