Sobes.tech
Senior

Решихте да напишете WaitGroup, защото се появи канал или защото решихте да напишете goroutines за нещо?

sobes.tech AI

Отговор от AI

WaitGroup в Go се използва за изчакване завършването на група горутини.

Ако имате няколко горутини, които изпълняват паралелни задачи, и трябва да изчакате те да приключат преди да продължите, WaitGroup е удобен инструмент.

Каналите и горутините са различни механизми. Каналът служи за комуникация и синхронизация между горутините, а WaitGroup — за изчакване на тяхното завършване.

Например, ако имате горутини за изпълнение на задачи и искате да изчакате всички да приключат, използвате WaitGroup:

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() // изчакваме всички горутини да приключат

По този начин, WaitGroup се използва точно защото има горутини, които трябва да се синхронизират при завършването им, а не заради появата на канали.