Junior — Middle
Оё метавонед шарҳ диҳед, ки чӣ гуна механизм интизор шудан барои анҷоми чанд горутин дар Go бо истифода аз WaitGroup кор мекунад?
sobes.tech AI
Ҷавоб аз AI
Дар Go, барои интизор шудан ба анҷоми чандир goroutine, намуд sync.WaitGroup истифода мешавад. Ин имкон медиҳад, ки ба чанд goroutine "обуна" шавед ва иҷроиро то анҷоми ҳамаи онҳо боздоред.
Равзанаҳои асосии WaitGroup:
- Add(n int) — ҳисобиро ба n меорад, одатан пеш аз оғоз кардани goroutine-ҳо даъват мешавад.
- Done() — ҳисобиро ба 1 кам мекунад, дар охири ҳар goroutine даъват мешавад.
- Wait() — иҷроиро бозмедорад, то ҳисобӣ ба 0 расад.
Маслиҳат барои истифода:
var wg sync.WaitGroup
wg.Add(3) // интизорем 3 goroutine
for i := 0; i < 3; i++ {
go func(id int) {
defer wg.Done() // нишон додани анҷом
fmt.Printf("Goroutine %d дар иҷро\н", id)
// коре баъзе
}(i)
}
wg.Wait() // интизорем, то ҳамаи goroutine-ҳо анҷом ёбанд
fmt.Println("Ҳама goroutine-ҳо анҷом ёфтанд")