Sobes.tech
Junior

Na čo slúži WaitGroup v Go?

sobes.tech AI

Odpoveď od AI

WaitGroup sa používá k synchronizaci práce jedné nebo více gorutin. Umožňuje hlavní gorutině čekat na dokončení ostatních vytvořených gorutin. Skládá se z čítače, který se zvyšuje při vytváření gorutiny a snižuje při jejím dokončení.

Hlavní metody:

  • Add(delta int): Zvyšuje nebo snižuje čítač gorutin.
  • Done(): Snižuje čítač o 1. Obvykle se volá na konci gorutiny (často s defer).
  • Wait(): Blokuje provádění, dokud čítač nedosáhne nuly.

Příklad použití:

package main

import (
	"fmt"
	"sync"
)

func worker(id int, wg *sync.WaitGroup) {
	defer wg.Done() // Snižuje čítač na konci gorutiny

	fmt.Printf("Goroutine %d začíná\n", id)
	// Simulace práce
	// time.Sleep(time.Second)
	fmt.Printf("Goroutine %d končí\n", id)
}

func main() {
	var wg sync.WaitGroup // Vytvoření WaitGroup

	for i := 1; i <= 5; i++ {
		wg.Add(1) // Zvýšení čítače pro každou gorutinu
		go worker(i, &wg) // Spuštění gorutiny, předání ukazatele na WaitGroup
	}

	wg.Wait() // Čekání, dokud čítač nedosáhne nuly (všechny gorutiny skončí)
	fmt.Println("Všechny gorutiny skončily")
}