Sobes.tech
Junior — Middle

Go'da WaitGroup kullanarak birden fazla goroutine'in tamamlanmasını bekleme mekanizmasını nasıl kullanıldığını açıklayabilir misiniz?

sobes.tech yapay zeka

AI'dan gelen yanıt

Go'da, birkaç goroutine'nin tamamlanmasını beklemek için sync.WaitGroup tipi kullanılır. Bu, birkaç goroutine'ye "abone olmayı" ve hepsi tamamlanana kadar yürütmeyi engellemeyi sağlar.

WaitGroup'in temel yöntemleri:

  • Add(n int) — sayacı n kadar artırır, genellikle goroutine'leri başlatmadan önce çağrılır.
  • Done() — sayacı 1 azaltır, her goroutine'un sonunda çağrılır.
  • Wait() — sayaç 0 olana kadar yürütmeyi engeller.

Kullanım örneği:

var wg sync.WaitGroup

wg.Add(3) // 3 goroutine bekleniyor

for i := 0; i < 3; i++ {
    go func(id int) {
        defer wg.Done() // tamamlandığını bildir
        fmt.Printf("Goroutine %d çalışıyor\n", id)
        // bazı işler
    }(i)
}

wg.Wait() // tüm goroutine'lerin tamamlanmasını bekle
fmt.Println("Tüm goroutine'ler tamamlandı")