Junior
Go-da WaitGroup nədir və nə üçün istifadə olunur?
sobes.tech Süni İntellekt
AI-dan cavab
WaitGroup, Go dilində sinxronizasiya mexanizmi olub, qrup gorutinlərinin tamamlanmasını gözləməyə imkan verir.
İstifadə olunur:
- Bütün gorutinlərin tamamlanmasını gözləmək və funksiya və ya proqramdan çıxmadan əvvəl.
- Bir neçə gorutin arasında işin koordinasiyası.
İstifadə nümunəsi:
package main
import (
"fmt"
"sync"
"time"
)
func worker(id int, wg *sync.WaitGroup) {
defer wg.Done() // Gorutina bitəndə sayğacı azaldır
fmt.Printf("İşçi %d başladı\n", id)
time.Sleep(time.Second) // İşin təqlidi
fmt.Printf("İşçi %d bitirdi\n", id)
}
func main() {
var wg sync.WaitGroup // WaitGroup elan edilir
numWorkers := 3
for i := 1; i <= numWorkers; i++ {
wg.Add(1) // Hər gorutina başlamazdan əvvəl sayğacı artırır
go worker(i, &wg)
}
wg.Wait() // Sayğac 0 olana qədər main-in icrasını bloklayır
fmt.Println("Bütün işçilər tamamlandı")
}
Əsas metodlar:
Add(delta int):WaitGroup-un daxili sayğacınıdeltaqədər artırır. Hər izləniləcək gorutina başlamazdan əvvəl çağırılmalıdır.Done():WaitGroup-un daxili sayğacını 1 azaldır. Adətən, gorutina daxilindədeferilə çağırılır ki, panik olsa belə sayğac azaldılsın.Wait(): Mövcud gorutinanı bloklayır vəWaitGroup-un daxili sayğacı 0 olana qədər gözləyir.