Junior
Go'da WaitGroup nedir ve ne için kullanılır?
sobes.tech yapay zeka
AI'dan gelen yanıt
WaitGroup, Go dilinde senkronizasyonu sağlayan bir mekanizmadır ve bir grup goroutine'nin tamamlanmasını beklemeye olanak tanır.
Kullanım alanları:
- Tüm goroutine'lerin tamamlanmasını beklemek ve fonksiyon veya programdan çıkmadan önce.
- Birden fazla goroutine arasında çalışma koordinasyonu.
Kullanım örneği:
package main
import (
"fmt"
"sync"
"time"
)
func worker(id int, wg *sync.WaitGroup) {
defer wg.Done() // Goroutine tamamlandığında sayacı azaltır
fmt.Printf("Çalışan %d başladı\n", id)
time.Sleep(time.Second) // İşlem taklidi
fmt.Printf("Çalışan %d bitti\n", id)
}
func main() {
var wg sync.WaitGroup // WaitGroup tanımlanır
numWorkers := 3
for i := 1; i <= numWorkers; i++ {
wg.Add(1) // Her goroutine başlamadan önce sayacı artırır
go worker(i, &wg)
}
wg.Wait() // Sayıç 0 olana kadar main'in çalışmasını engeller
fmt.Println("Tüm çalışanlar tamamlandı")
}
Ana metodlar:
Add(delta int):WaitGroup'un iç sayacınıdeltakadar artırır. Takip edilmek istenen her goroutine'den önce çağrılmalıdır.Done():WaitGroup'un iç sayacını 1 azaltır. Genellikle goroutine içindedeferile çağrılır, böylece panik olsa bile sayacın azaltılması garanti edilir.Wait():WaitGroup'un iç sayacı 0 olana kadar çağıran goroutine'i engeller.