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