Sobes.tech
Junior — Middle

Go-da WaitGroup istifadə edərək bir neçə goroutine-in tamamlanmasını gözləmə mexanizminin necə işlədiyini izah edə bilərsinizmi?

sobes.tech Süni İntellekt

AI-dan cavab

Go-da, bir neçə goroutin'in tamamlanmasını gözləmək üçün sync.WaitGroup tipi istifadə olunur. Bu, bir neçə goroutin'ə "abunə olmağa" və hamısı tamamlanana qədər icraatı bloklamağa imkan verir.

WaitGroup-in əsas metodları:

  • Add(n int) — sayacı n qədər artırır, adətən goroutin'lər başlamazdan əvvəl çağırılır.
  • Done() — sayacı 1 azaldır, hər goroutin'in sonunda çağırılır.
  • Wait() — sayac 0 olana qədər icraatı bloklayır.

İstifadə nümunəsi:

var wg sync.WaitGroup

wg.Add(3) // 3 goroutin gözləyirik

for i := 0; i < 3; i++ {
    go func(id int) {
        defer wg.Done() // tamamlandığını bildir
        fmt.Printf("Goroutine %d işləyir\n", id)
        // bəzi işlər
    }(i)
}

wg.Wait() // bütün goroutin'lərin tamamlanmasını gözləyirik
fmt.Println("Bütün goroutin'lər tamamlandı")