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.