Junior — Middle
É possível que uma goroutine seja interrompida ou pare por si só?
sobes.tech IA
Resposta da IA
Em Go, a execução de uma goroutine pode terminar por si só em várias situações:
- A goroutine terminou a sua função. Assim que a função executada na goroutine termina, a goroutine é encerrada.
- Pânico dentro da goroutine. Se ocorrer um pânico dentro da goroutine e não for tratado, ela terminará abruptamente.
- Cancelamento através do contexto (context). Se a goroutine escuta um sinal de cancelamento através de
context.Contexte o recebe, ela pode terminar corretamente.
É importante entender que as goroutines não são interrompidas de fora de forma forçada — é necessário implementar um mecanismo de parada por conta própria, por exemplo, através de canais ou contextos.
Exemplo de uso de contexto para cancelar uma goroutine:
ctx, cancel := context.WithCancel(context.Background())
go func(ctx context.Context) {
for {
select {
case <-ctx.Done():
fmt.Println("Goroutine encerrada")
return
default:
// trabalho
}
}
}(ctx)
// Em algum momento, chamamos cancel()
cancel()
Dessa forma, a goroutine termina seja por si mesma ao concluir seu trabalho, seja por sinal de cancelamento, se isso estiver previsto.