Junior — Middle
¿Es posible realizar una operación de lectura del canal sin usar un búfer?
sobes.tech AI
Respuesta de la IA
En Go, la operación de lectura de un canal (chan) sin usar un búfer solo es posible si el canal es con búfer. Si el canal no tiene búfer (tamaño 0), la operación de lectura se bloquea hasta que se envíe un valor al canal.
Por lo tanto:
- Para una lectura no bloqueante sin búfer, se deben usar operaciones no bloqueantes con el canal (por ejemplo, mediante
selectcondefault), pero esto no garantiza la recepción de datos. - Si el canal no tiene búfer, la lectura siempre se bloquea hasta que alguien envíe datos.
Ejemplo de un canal con búfer:
ch := make(chan int, 1) // búfer de 1 elemento
ch <- 42 // enviamos un valor
val := <-ch // leemos sin bloqueo
Si el canal no tiene búfer, la lectura y escritura se sincronizan directamente entre goroutines.