Sobes.tech
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.Context e 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.