Sobes.tech
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ğunlukla defer ile 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ı")
}