Middle+
Fale mais sobre WaitGroup: como funciona, o que fazem Add, Done, Wait?
sobes.tech IA
Resposta da IA
O WaitGroup em Go é usado para aguardar a conclusão de um grupo de goroutines.
- Add(n int) — aumenta o contador em n, geralmente chamado antes de iniciar goroutines.
- Done() — diminui o contador em 1, chamado dentro da goroutine após a conclusão do trabalho.
- Wait() — bloqueia a execução até que o contador seja zero, ou seja, até que todas as goroutines chamem Done.
Exemplo:
var wg sync.WaitGroup
wg.Add(3) // espera 3 goroutines
for i := 0; i < 3; i++ {
go func(id int) {
defer wg.Done()
fmt.Println("Goroutine", id, "concluída")
}(i)
}
wg.Wait() // espera que todas as goroutines terminem
fmt.Println("Todas as goroutines concluídas")
Assim, o WaitGroup ajuda a sincronizar tarefas paralelas e aguardar sua conclusão.