Junior
Go'да WaitGroup эмне үчүн колдонулат?
sobes.tech AI
AIден жооп
WaitGroup бир же бир нече goroutine ишин синхрондоштуруу үчүн колдонулат. Бул негизги goroutine башка түзүлгөн goroutine'лердин аяктоо убактысын күтүүгө мүмкүндүк берет. Ал эсептегичтен турат, ал goroutine түзүлгөндө көбөйөт жана аяктагандан кийин азайтылат.
Негизги ыкмалары:
Add(delta int): Goroutine санын көбөйтөт же азайтат.Done(): Санакты 1ге азайтат. Адатта, goroutine аяктагандан кийин чакырылат (көп учурдаdeferменен).Wait(): Санак нөлгө жеткенче ишти токтотот.
Колдонуу мисалы:
package main
import (
"fmt"
"sync"
)
func worker(id int, wg *sync.WaitGroup) {
defer wg.Done() // Goroutine аяктагандан кийин санакты азайтат
fmt.Printf("Goroutine %d башталды\n", id)
// Ишти имитациялоо
// time.Sleep(time.Second)
fmt.Printf("Goroutine %d аяктады\n", id)
}
func main() {
var wg sync.WaitGroup // WaitGroup түзүү
for i := 1; i <= 5; i++ {
wg.Add(1) // Ар бир goroutine үчүн санакты көбөйтүү
go worker(i, &wg) // Goroutine'ду ишке киргизүү, көрсөткүчтү берүү
}
wg.Wait() // Санак нөлгө жеткенче күтүү (бардык goroutine'дер аяктады)
fmt.Println("Бардык goroutine'дер аяктады")
}