Junior
Go'da WaitGroup ne işe yarar?
sobes.tech yapay zeka
AI'dan gelen yanıt
WaitGroup, bir veya birkaç goroutine'in çalışmasını senkronize etmek için kullanılır. Ana goroutine'in, oluşturulan diğer goroutine'lerin tamamlanmasını beklemesine olanak tanır. Bir sayaçtan oluşur; bu sayaç, goroutine oluşturulurken artırılır ve tamamlandığında azaltılır.
Ana yöntemler:
Add(delta int): Goroutine sayacını artırır veya azaltır.Done(): Sayacı 1 azaltır. Genellikle goroutine'un sonunda çağrılır (çoğunlukladeferile birlikte).Wait(): Sayaç sıfır olana kadar yürütmeyi engeller.
Kullanım örneği:
package main
import (
"fmt"
"sync"
)
func worker(id int, wg *sync.WaitGroup) {
defer wg.Done() // Goroutine tamamlandığında sayacı azalt
fmt.Printf("Goroutine %d başlıyor\n", id)
// İşlem simülasyonu
// time.Sleep(time.Second)
fmt.Printf("Goroutine %d tamamlandı\n", id)
}
func main() {
var wg sync.WaitGroup // WaitGroup oluştur
for i := 1; i <= 5; i++ {
wg.Add(1) // Her goroutine için sayacı artır
go worker(i, &wg) // Goroutine başlat, göstergeyi geçir
}
wg.Wait() // Tüm goroutine'ler tamamlanana kadar bekle
fmt.Println("Tüm goroutine'ler tamamlandı")
}