Junior — Middle
Como parar corretamente uma goroutine em execução, se necessário que ela termine com base em um sinal externo ou condição, mesmo que o resultado ainda não tenha sido obtido?
sobes.tech IA
Resposta da IA
Para parar corretamente uma goroutine em execução por um sinal externo ou condição em Go, geralmente usa-se o contexto (context.Context) ou canais para transmitir o sinal de cancelamento.
Exemplo usando contexto:
func worker(ctx context.Context) {
for {
select {
case <-ctx.Done():
// Sinal de cancelamento recebido, encerrando a goroutine
return
default:
// Executar trabalho
}
}
}
func main() {
ctx, cancel := context.WithCancel(context.Background())
go worker(ctx)
// Em algum momento, chamamos cancel() para parar a goroutine
cancel()
}
Essa abordagem permite que a goroutine verifique periodicamente se um sinal de parada foi enviado e finalize corretamente, mesmo que o resultado ainda não tenha sido obtido. De forma semelhante, pode-se usar um canal para transmitir o sinal de parada, mas o context é uma maneira mais idiomática e conveniente em Go.