Sobes.tech
Back to questions
Senior
9

Ты добавляешь WaitGroup, чтобы что?

Companies where asked
Cloud.ru

Answer from AI

sobes.tech AI

WaitGroup в Go используется для синхронизации нескольких горутин. Его основная задача — ждать завершения набора горутин перед продолжением выполнения основной программы.

Когда ты запускаешь несколько горутин, чтобы убедиться, что все они завершились, добавляешь в WaitGroup количество ожидаемых горутин с помощью Add(n). Каждая горутина после завершения вызывает Done(), уменьшая счётчик. Основная горутина вызывает Wait(), которая блокируется, пока счётчик не станет нулём.

Пример:

var wg sync.WaitGroup

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

for i := 0; i < 3; i++ {
    go func(id int) {
        defer wg.Done()
        fmt.Println("Горутина", id, "завершена")
    }(i)
}

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

Таким образом, WaitGroup помогает избежать преждевременного завершения программы и гарантирует, что все параллельные задачи выполнены.