Sobes.tech
Middle+

Разкажи ми повече за WaitGroup: как работи, какво правят Add, Done, Wait?

sobes.tech AI

Отговор от AI

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

  • Add(n int) — увеличава брояча с n, обикновено се извиква преди стартирането на горутините.
  • Done() — намалява брояча с 1, извиква се в горутината след приключване на работата.
  • Wait() — блокира изпълнението, докато броячът не стане нула, т.е. всички горутини да са извикали Done.

Пример:

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

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