Sobes.tech
Junior — Middle

Puteți explica cum funcționează mecanismul de așteptare a finalizării mai multor goroutines în Go folosind WaitGroup?

sobes.tech AI

Răspuns de la AI

În Go, pentru a aștepta finalizarea mai multor goroutines, se folosește tipul sync.WaitGroup. Acesta permite "abonarea" la mai multe goroutines și blocarea execuției până când toate acestea se termină.

Metodele principale ale WaitGroup:

  • Add(n int) — crește contorul cu n, de obicei apelat înainte de a porni goroutines.
  • Done() — scade contorul cu 1, apelat la sfârșitul fiecărei goroutine.
  • Wait() — blochează execuția până când contorul ajunge la 0.

Exemplu de utilizare:

var wg sync.WaitGroup

wg.Add(3) // așteptăm 3 goroutines

for i := 0; i < 3; i++ {
    go func(id int) {
        defer wg.Done() // semnalăm finalizarea
        fmt.Printf("Goroutine %d în execuție\n", id)
        // o muncă
    }(i)
}

wg.Wait() // așteptăm finalizarea tuturor goroutine-urilor
fmt.Println("Toate goroutine-urile au fost finalizate")