Junior — Middle
Como parar a execução de uma goroutine se o valor esperado ainda não foi atingido?
sobes.tech IA
Resposta da IA
No Go, para parar uma goroutine que espera um valor, mas esse valor pode não chegar, geralmente usam-se canais com timeout ou contexto com cancelamento.
Exemplo com timeout usando select e time.After:
select {
case val := <-ch:
// valor recebido, continuar o trabalho
case <-time.After(time.Second * 5):
// timeout, parar a goroutine
}
Outra forma é usar um contexto (context.Context), que pode ser cancelado de fora:
ctx, cancel := context.WithCancel(context.Background())
go func() {
select {
case val := <-ch:
// processar val
case <-ctx.Done():
// parar a goroutine
}
}()
// em algum momento do código, chamar cancel() para parar a goroutine
Dessa forma, a goroutine não ficará esperando indefinidamente e poderá terminar corretamente.