¿Cuál de los siguientes fragmentos de código contiene un error o problema potencial relacionado con el trabajo con canales? Opción 1 package main func main() { ch := make(chan int) ch <- 1 } Opción 2 package main func main() { ch := make(chan int, 1) ch <- 1 } Opción 3 package main func main() { ch := make(chan int, 1) ch <- 1 <-ch } Opción 4 package main func main() { ch := make(chan int) close(ch) <-ch } Opción 5 package main func main() { ch := make(chan int, 3) ch <- 4 }
sobes.tech AI
Respuesta de la IA
El error está en la Opción 1:
package main
func main() {
ch := make(chan int)
ch <- 1
}
Aquí se crea un canal sin búfer ch := make(chan int). Enviar en ese canal ch <- 1 se bloquea hasta que alguien lea del canal. En este código no hay ningún receptor, por lo que el programa se bloqueará para siempre (deadlock).
La opción 2 es correcta, ya que el canal tiene búfer de tamaño 1, y el envío no se bloquea si el búfer no está lleno.
La opción 3 también es correcta: el envío y la recepción están equilibrados.
La opción 4 es correcta: se puede leer de un canal cerrado, la lectura devolverá el valor cero y no se bloqueará.
La opción 5 es correcta: búfer de 3, se envía un valor, el búfer no se llena.
En resumen, el problema solo está en la Opción 1 — bloqueo al enviar en un canal sin búfer y sin receptor.