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