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")