Junior
Go'da WaitGroup nə üçün istifadə olunur?
sobes.tech Süni İntellekt
AI-dan cavab
WaitGroup, bir və ya bir neçə goroutin'in işini sinxronlaşdırmaq üçün istifadə olunur. Bu, əsas goroutin'in digər yaradılmış goroutin'lərin tamamlanmasını gözləməsinə imkan verir. Bu, sayğacdan ibarətdir; bu sayğac, goroutin yaradıldıqda artırılır və tamamlandıqda azaldılır.
Əsas metodlar:
Add(delta int): Goroutin sayğacını artırır və ya azaldır.Done(): Sayğacı 1 azaldır. Adətən goroutin'un sonunda çağırılır (tez-tezdeferilə birlikdə).Wait(): Sayğac sıfır olana qədər icraatı bloklayır.
İstifadə nümunəsi:
package main
import (
"fmt"
"sync"
)
func worker(id int, wg *sync.WaitGroup) {
defer wg.Done() // Goroutin tamamlandıqda sayğacı azaldır
fmt.Printf("Goroutine %d başlayır\n", id)
// İşin simulyasiyası
// time.Sleep(time.Second)
fmt.Printf("Goroutine %d bitir\n", id)
}
func main() {
var wg sync.WaitGroup // WaitGroup yaradılır
for i := 1; i <= 5; i++ {
wg.Add(1) // Hər goroutin üçün sayğacı artırırıq
go worker(i, &wg) // Goroutin'u işə salırıq, göstərici olaraq WaitGroup veririk
}
wg.Wait() // Sayğac 0 olana qədər gözləyirik (bütün goroutin'lar tamamlanır)
fmt.Println("Bütün goroutin'lar tamamlandı")
}