Sobes.tech
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-tez defer ilə 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ı")
}