Junior
258
Для чего используется WaitGroup в Go?
AI-дан жауап
sobes.tech AI
WaitGroup используется для синхронизации работы одной или нескольких горутин. Позволяет основной горутине дождаться завершения выполнения других созданных горутин. Состоит из счетчика, который увеличивается при создании горутины и уменьшается при ее завершении.
Основные методы:
Add(delta int): Увеличивает или уменьшает счетчик горутин.Done(): Уменьшает счетчик на 1. Обычно вызывается в конце горутины (часто с использованиемdefer).Wait(): Блокирует выполнение до тех пор, пока счетчик не станет равным нулю.
Пример использования:
package main
import (
"fmt"
"sync"
)
func worker(id int, wg *sync.WaitGroup) {
defer wg.Done() // Уменьшаем счетчик по завершении горутины
fmt.Printf("Горутина %d начала работу\n", id)
// Имитация работы
// time.Sleep(time.Second)
fmt.Printf("Горутина %d завершила работу\n", id)
}
func main() {
var wg sync.WaitGroup // Создаем WaitGroup
for i := 1; i <= 5; i++ {
wg.Add(1) // Увеличиваем счетчик для каждой горутины
go worker(i, &wg) // Запускаем горутину, передавая указатель на WaitGroup
}
wg.Wait() // Ждем, пока счетчик не станет 0 (все горутины завершатся)
fmt.Println("Все горутины завершены")
}