Junior — Middle
Como parar corretamente a execução de goroutines usando o contexto em Go?
sobes.tech IA
Resposta da IA
Para parar corretamente as goroutines em Go, muitas vezes usa-se o pacote context. Cria-se um contexto com a capacidade de cancelamento (context.WithCancel), que é passado para a goroutine. Dentro da goroutine, o estado do contexto é verificado periodicamente através de <-ctx.Done(). Quando a função de cancelamento é chamada, o canal Done() é fechado, e a goroutine pode terminar corretamente.
Exemplo:
func worker(ctx context.Context) {
for {
select {
case <-ctx.Done():
fmt.Println("Goroutine parada")
return
default:
// realizar trabalho
}
}
}
func main() {
ctx, cancel := context.WithCancel(context.Background())
go worker(ctx)
// após algum tempo, parar a goroutine
time.Sleep(time.Second)
cancel()
time.Sleep(time.Millisecond * 100) // para que a goroutine possa terminar
}
Essa abordagem permite encerrar goroutines de forma segura e controlada sem usar métodos inseguros.