Sobes.tech
Senior

¿Qué sucede al leer desde un canal cerrado en Go?

sobes.tech AI

Respuesta de la IA

Al leer desde un canal cerrado en Go, sucede lo siguiente:

  • Si hay datos en el canal, se leerán normalmente.
  • Si el canal está cerrado y no hay datos, la operación de lectura devolverá el valor cero del tipo del canal y false en el segundo valor devuelto (si se usa la forma con dos valores de retorno).

Ejemplo:

ch := make(chan int)
close(ch)

v, ok := <-ch
fmt.Println(v, ok) // Imprimirá: 0 false

Esto permite determinar que el canal está cerrado y no habrá más datos. Al leer desde un canal cerrado sin datos, la gorutina no se bloquea y recibe inmediatamente el valor cero.

Si se lee desde un canal cerrado sin verificar el segundo valor, se pueden obtener datos nulos, lo cual es importante tener en cuenta en la lógica de procesamiento.