Junior — Middle
¿Qué sucede si intentas leer datos de un canal que actualmente no contiene elementos?
sobes.tech AI
Respuesta de la IA
En Go, si intentas leer de un canal que actualmente no contiene elementos, el comportamiento depende del tipo de canal:
- Canal con búfer: si el búfer está vacío, la lectura se bloquea hasta que se escriba un elemento en el canal.
- Canal sin búfer: la lectura se bloquea hasta que otra gorutina envíe un valor.
Por lo tanto, leer de un canal vacío provoca que la gorutina actual se bloquee hasta que haya datos o se cierre el canal.
Ejemplo:
ch := make(chan int)
// Leer de un canal vacío bloqueará la ejecución
val := <-ch // se bloquea hasta que alguien envíe un valor
// Para evitar el bloqueo, se puede usar select con default
select {
case val := <-ch:
fmt.Println("Recibido", val)
default:
fmt.Println("No hay datos en el canal")
}