Junior — Middle
Pode explicar como funciona o mecanismo de espera pela conclusão de várias goroutines em Go usando WaitGroup?
sobes.tech IA
Resposta da IA
Em Go, para esperar que várias goroutines terminem, usa-se o tipo sync.WaitGroup. Ele permite "subscrever-se" a várias goroutines e bloquear a execução até que todas elas terminem.
Principais métodos do WaitGroup:
- Add(n int) — aumenta o contador em n, geralmente chamado antes de iniciar as goroutines.
- Done() — diminui o contador em 1, chamado ao final de cada goroutine.
- Wait() — bloqueia a execução até que o contador seja 0.
Exemplo de uso:
var wg sync.WaitGroup
wg.Add(3) // esperamos 3 goroutines
for i := 0; i < 3; i++ {
go func(id int) {
defer wg.Done() // sinaliza o término
fmt.Printf("Goroutine %d em execução\n", id)
// algum trabalho
}(i)
}
wg.Wait() // esperamos que todas as goroutines terminem
fmt.Println("Todas as goroutines terminaram")