Junior
Para que é que o WaitGroup é utilizado em Go?
sobes.tech IA
Resposta da IA
WaitGroup é utilizado para sincronizar o trabalho de uma ou várias goroutines. Permite que a goroutine principal aguarde a conclusão de outras goroutines criadas. Consiste num contador que aumenta quando uma goroutine é criada e diminui quando ela termina.
Métodos principais:
Add(delta int): Aumenta ou diminui o contador de goroutines.Done(): Diminui o contador em 1. Geralmente chamado ao final de uma goroutine (frequentemente comdefer).Wait(): Bloqueia a execução até que o contador seja zero.
Exemplo de uso:
package main
import (
"fmt"
"sync"
)
func worker(id int, wg *sync.WaitGroup) {
defer wg.Done() // Diminui o contador ao terminar a goroutine
fmt.Printf("Goroutine %d começa\n", id)
// Simulação de trabalho
// time.Sleep(time.Second)
fmt.Printf("Goroutine %d termina\n", id)
}
func main() {
var wg sync.WaitGroup // Cria um WaitGroup
for i := 1; i <= 5; i++ {
wg.Add(1) // Incrementa o contador para cada goroutine
go worker(i, &wg) // Inicia a goroutine, passando o ponteiro do WaitGroup
}
wg.Wait() // Aguarda até que o contador seja zero (todas as goroutines terminem)
fmt.Println("Todas as goroutines terminaram")
}