Sobes.tech
Junior — Middle

Como garantir a conclusão de todas as goroutines em execução num programa?

sobes.tech IA

Resposta da IA

No Go, não há uma forma incorporada de terminar forçadamente uma goroutine de fora. Para garantir que todas as goroutines em execução terminem, geralmente usa-se sincronização com sync.WaitGroup.

Princípio de funcionamento:

  • Antes de iniciar cada goroutine, chama-se wg.Add(1).
  • Dentro da goroutine, no final, chama-se wg.Done().
  • Na função principal, chama-se wg.Wait(), que bloqueia a execução até que o contador seja zero.

Exemplo:

var wg sync.WaitGroup

wg.Add(1)
go func() {
    defer wg.Done()
    // trabalho da goroutine
}()

wg.Wait() // esperar que todas as goroutines terminem

Dessa forma, o programa garantirá que todas as goroutines terminem antes de continuar ou finalizar.