Sobes.tech
Junior — Middle

¿Es posible que una goroutine sea interrumpida o se detenga por sí sola?

sobes.tech AI

Respuesta de la IA

En Go, la ejecución de una gorutina puede terminar por sí sola en varias situaciones:

  • La gorutina ha terminado su función. Tan pronto como la función ejecutada en la gorutina finaliza, la gorutina se cierra.
  • Pánico dentro de la gorutina. Si ocurre un pánico dentro de la gorutina y no se maneja, la gorutina terminará de forma abrupta.
  • Cancelación mediante contexto (context). Si la gorutina escucha una señal de cancelación a través de context.Context y la recibe, puede terminarse correctamente.

Es importante entender que las gorutinas no se interrumpen desde fuera de forma forzada — es necesario implementar un mecanismo de parada por cuenta propia, por ejemplo, mediante canales o contextos.

Ejemplo de uso de contexto para cancelar una gorutina:

ctx, cancel := context.WithCancel(context.Background())

go func(ctx context.Context) {
    for {
        select {
        case <-ctx.Done():
            fmt.Println("Gorutina finalizada")
            return
        default:
            // trabajo
        }
    }
}(ctx)

// En algún momento, llamamos a cancel()
cancel()

De esta forma, la gorutina termina ya sea por sí misma al finalizar su trabajo, o por señal de cancelación, si está prevista.