Sobes.tech
Junior — Middle

¿Cómo se puede detener la ejecución de una gorutina si el valor esperado aún no se ha alcanzado?

sobes.tech AI

Respuesta de la IA

En Go, para detener una gorutina que espera un valor, pero ese valor puede no llegar, generalmente se usan canales con tiempo de espera o un contexto con cancelación.

Ejemplo con tiempo de espera usando select y time.After:

select {
case val := <-ch:
    // se recibió un valor, continuar trabajando
case <-time.After(time.Second * 5):
    // tiempo de espera agotado, detener la gorutina
}

Otra forma es usar un contexto (context.Context), que se puede cancelar desde fuera:

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

go func() {
    select {
    case val := <-ch:
        // procesar val
    case <-ctx.Done():
        // detener la gorutina
    }
}()

// en algún momento del código, llamar a cancel() para detener la gorutina

De esta manera, la gorutina no quedará esperando indefinidamente y podrá terminarse correctamente.