Sobes.tech
Junior — Middle

¿Cómo implementar una finalización segura de una gorutina cuando no se recibe el resultado esperado, usando la estructura switch-case?

sobes.tech AI

Respuesta de la IA

Para finalizar de manera segura una goroutine mientras se espera un resultado, se puede usar la construcción select con múltiples casos, incluyendo un tiempo de espera o una señal de cancelación. En Go no existe un switch-case directo para canales, pero select cumple una función similar.

Ejemplo con tiempo de espera:

func worker(done chan struct{}) {
    select {
    case result := <-someChannel:
        fmt.Println("Resultado recibido:", result)
    case <-time.After(5 * time.Second):
        fmt.Println("Tiempo de espera agotado, finalizando goroutine")
        return
    case <-done:
        fmt.Println("Se recibió señal de finalización")
        return
    }
}

Aquí, la goroutine espera datos de someChannel. Si los datos no llegan en 5 segundos, se activa el tiempo de espera y la goroutine termina. También se puede enviar una señal a través del canal done para finalizarla de forma forzada.

Este enfoque evita que la goroutine quede bloqueada y permite controlarla de manera segura.