Sobes.tech
Junior — Middle

¿Cómo se debe realizar correctamente la lectura de datos desde un canal sin búfer?

sobes.tech AI

Respuesta de la IA

En Go, para leer datos de un canal sin búfer, se debe usar una lectura no bloqueante o una lectura con control de disponibilidad de datos. Los canales por defecto pueden ser con o sin búfer, pero para leer sin búfer, generalmente se usan canales sin búfer y la lectura mediante el operador <-.

Ejemplo de lectura desde un canal sin búfer:

ch := make(chan int) // canal sin búfer

// Enviando en una goroutine separada
go func() {
    ch <- 42
}()

// Lectura (esperará hasta que los datos estén disponibles)
value := <-ch
fmt.Println(value) // 42

Si se desea evitar bloqueo al leer, se puede usar la construcción con select y default:

select {
case val := <-ch:
    fmt.Println("Recibido", val)
default:
    fmt.Println("No hay datos")
}