Sobes.tech
Junior — Middle

Můžete vysvětlit, jak funguje mechanismus čekání na dokončení více gorutin v Go pomocí WaitGroup?

sobes.tech AI

Odpověď od AI

V jazyce Go se pro čekání na dokončení několika gorutin používá typ sync.WaitGroup. Umožňuje "přihlásit se" k několika gorutinám a zablokovat provádění, dokud všechny nedokončí.

Hlavní metody WaitGroup:

  • Add(n int) — zvyšuje čítač o n, obvykle se volá před spuštěním gorutin.
  • Done() — snižuje čítač o 1, volá se na konci každé gorutiny.
  • Wait() — blokuje provádění, dokud čítač nedosáhne 0.

Příklad použití:

var wg sync.WaitGroup

wg.Add(3) // čekáme na 3 gorutiny

for i := 0; i < 3; i++ {
    go func(id int) {
        defer wg.Done() // signalizujeme dokončení
        fmt.Printf("Gorutina %d běží\n", id)
        // nějaká práce
    }(i)
}

wg.Wait() // čekáme na dokončení všech gorutin
fmt.Println("Všechny gorutiny dokončeny")