Junior
Co je to WaitGroup v Go a k čemu se používá?
sobes.tech AI
Odpověď od AI
WaitGroup je mechanismus synchronizace v jazyce Go, který umožňuje čekat na dokončení skupiny gorutin.
Používá se k:
- Čekání na dokončení všech gorutin před ukončením funkce nebo programu.
- Koordinaci práce mezi více gorutinami.
Příklad použití:
package main
import (
"fmt"
"sync"
"time"
)
func worker(id int, wg *sync.WaitGroup) {
defer wg.Done() // Sníží čítač po dokončení gorutiny
fmt.Printf("Pracovník %d začal\n", id)
time.Sleep(time.Second) // Simulace práce
fmt.Printf("Pracovník %d skončil\n", id)
}
func main() {
var wg sync.WaitGroup // Deklarace WaitGroup
numWorkers := 3
for i := 1; i <= numWorkers; i++ {
wg.Add(1) // Zvýšení čítače před spuštěním každé gorutiny
go worker(i, &wg)
}
wg.Wait() // Zablokuje provádění main, dokud čítač nedosáhne 0
fmt.Println("Všichni pracovníci dokončili")
}
Hlavní metody:
Add(delta int): Zvyšuje interní čítačWaitGroupodelta. Mělo by být voláno před spuštěním každé sledované gorutiny.Done(): Snižuje interní čítačWaitGroupo 1. Obvykle se volá sdeferuvnitř gorutiny, aby se zajistilo snížení i při panice.Wait(): Blokuje aktuální gorutinu, dokud interní čítačWaitGroupnedosáhne 0.