Junior — Middle
Como pode forçar a paragem de várias goroutines a correr em Go?
sobes.tech IA
Resposta da IA
Em Go, para parar várias goroutines em execução de forma forçada, geralmente usa-se o mecanismo de cancelamento através do contexto (context.Context).
Ideia principal:
- Criar um contexto com cancelamento (
context.WithCanceloucontext.WithTimeout). - Cada goroutine recebe esse contexto e verifica periodicamente se foi cancelado.
- Ao chamar a função de cancelamento (
cancel()), todas as goroutines recebem o sinal e podem terminar corretamente.
Exemplo:
ctx, cancel := context.WithCancel(context.Background())
for i := 0; i < 5; i++ {
go func(id int) {
for {
select {
case <-ctx.Done():
fmt.Printf("Goroutine %d parada\n", id)
return
default:
// trabalho da goroutine
time.Sleep(100 * time.Millisecond)
}
}
}(i)
}
// Após algum tempo, paramos todas as goroutines
time.Sleep(1 * time.Second)
cancel()
// Esperamos que terminem (por exemplo, usando sync.WaitGroup)
Este método permite gerir centralizadamente a paragem de várias goroutines e evita problemas com encerramentos descontrolados.