Junior
Какво е WaitGroup в Go и за какво се използва?
sobes.tech AI
Отговор от AI
WaitGroup е механизъм за синхронизация в Go, който позволява да се изчака завършването на група goroutines.
Използва се за:
- Изчакване на всички goroutines да приключат преди изход от функцията или програмата.
- Координиране на работата между няколко goroutines.
Пример за използване:
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() // Блокира изпълнението на main, докато броячът не стане 0
fmt.Println("Всички работници приключиха")
}
Основни методи:
Add(delta int): Увеличава вътрешния брояч наWaitGroupсdelta. Трябва да се извика преди стартирането на всяка goroutine, която трябва да се следи.Done(): Намалява вътрешния брояч наWaitGroupс 1. Обикновено се извиква сdeferвътре в goroutine, за да се гарантира намаляването дори при паника.Wait(): Блокира текущата goroutine, докато вътрешният брояч наWaitGroupне стане 0.