Sobes.tech
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.