Sobes.tech
Senior

¿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.