Sobes.tech
Junior

За какво се използва WaitGroup в Go?

sobes.tech AI

Отговор от AI

WaitGroup се използва за синхронизиране на работата на една или повече goroutines. Позволява на основната goroutine да изчака завършването на други създадени goroutines. Състои се от брояч, който се увеличава при създаване на goroutine и се намалява при нейното завършване.

Основни методи:

  • Add(delta int): Увеличава или намалява броя на goroutines.
  • 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, предавайки указател към WaitGroup
	}

	wg.Wait() // Изчакване, докато броячът не стане 0 (всички goroutines приключат)
	fmt.Println("Всички goroutines приключиха")
}