Junior — Middle
Como gerir o estado e o encerramento de uma goroutine em Go?
sobes.tech IA
Resposta da IA
Em Go, a gestão do estado e a finalização das goroutines geralmente é feita usando canais (channels) e contextos (context).
- Canais permitem transmitir sinais entre goroutines. Por exemplo, pode criar um canal para notificar a necessidade de terminar:
stop := make(chan struct{})
func() {
for {
select {
case <-stop:
return // Termina a goroutine
default:
// Executa trabalho
}
}
}()
// Para parar a goroutine:
close(stop)
- Pacote context fornece uma forma conveniente de gerir o tempo de vida das goroutines, especialmente ao trabalhar com pedidos ou operações longas:
ctx, cancel := context.WithCancel(context.Background())
func(ctx context.Context) {
for {
select {
case <-ctx.Done():
return // Termina a goroutine
default:
// Trabalho
}
}
}(ctx)
// Para parar:
cancel()
Desta forma, as goroutines escutam sinais através de canais ou contextos e terminam corretamente ao receber o sinal.