Sobes.tech
Junior

Co je to WaitGroup v Go a k čemu se používá?

sobes.tech AI

Odpověď od AI

WaitGroup je mechanismus synchronizace v jazyce Go, který umožňuje čekat na dokončení skupiny gorutin.

Používá se k:

  • Čekání na dokončení všech gorutin před ukončením funkce nebo programu.
  • Koordinaci práce mezi více gorutinami.

Příklad použití:

package main

import (
	"fmt"
	"sync"
	"time"
)

func worker(id int, wg *sync.WaitGroup) {
	defer wg.Done() // Sníží čítač po dokončení gorutiny

	fmt.Printf("Pracovník %d začal\n", id)
	time.Sleep(time.Second) // Simulace práce
	fmt.Printf("Pracovník %d skončil\n", id)
}

func main() {
	var wg sync.WaitGroup // Deklarace WaitGroup
	numWorkers := 3

	for i := 1; i <= numWorkers; i++ {
		wg.Add(1) // Zvýšení čítače před spuštěním každé gorutiny
		go worker(i, &wg)
	}

	wg.Wait() // Zablokuje provádění main, dokud čítač nedosáhne 0
	fmt.Println("Všichni pracovníci dokončili")
}

Hlavní metody:

  • Add(delta int): Zvyšuje interní čítač WaitGroup o delta. Mělo by být voláno před spuštěním každé sledované gorutiny.
  • Done(): Snižuje interní čítač WaitGroup o 1. Obvykle se volá s defer uvnitř gorutiny, aby se zajistilo snížení i při panice.
  • Wait(): Blokuje aktuální gorutinu, dokud interní čítač WaitGroup nedosáhne 0.