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ı")