Junior
Čo je to WaitGroup v Go a na čo sa používa?
sobes.tech AI
Odpoveď od AI
WaitGroup je mechanizmus synchronizácie v Go, ktorý umožňuje čakať na dokončenie skupiny gorútín.
Používa sa na:
- Čakanie na dokončenie všetkých gorútín pred ukončením funkcie alebo programu.
- Koordináciu práce medzi viacerými gorútinami.
Príklad použitia:
package main
import (
"fmt"
"sync"
"time"
)
func worker(id int, wg *sync.WaitGroup) {
defer wg.Done() // Znižuje čítač po ukončení gorutiny
fmt.Printf("Pracovník %d začal\n", id)
time.Sleep(time.Second) // Simulácia práce
fmt.Printf("Pracovník %d skončil\n", id)
}
func main() {
var wg sync.WaitGroup // Deklarujeme WaitGroup
numWorkers := 3
for i := 1; i <= numWorkers; i++ {
wg.Add(1) // Zvýšenie čítača pred spustením každej gorutiny
go worker(i, &wg)
}
wg.Wait() // Zablokuje vykonávanie main, kým čítač nedosiahne 0
fmt.Println("Všetci pracovníci dokončili")
}
Hlavné metódy:
Add(delta int): Zvýši vnútorný čítačWaitGroupodelta. Mal by byť volaný pred spustením každej sledovanej gorutiny.Done(): Zníži vnútorný čítačWaitGroupo 1. Zvyčajne sa volá sdeferv gorutine, aby sa zabezpečilo zníženie aj pri panike.Wait(): Blokuje aktuálnu gorutinu, kým vnútorný čítačWaitGroupnedosiahne 0.