Junior — Middle
¿Cómo se comporta el programa al usar range para leer desde un canal cerrado no bufferizado?
sobes.tech AI
Respuesta de la IA
Al usar range para leer desde un canal en Go, el ciclo recibirá valores del canal hasta que este se cierre. Si el canal está cerrado y ya se han leído todos los valores, range terminará el ciclo.
Para un canal sin búfer, funciona igual que para uno con búfer: si el canal está cerrado, range no bloquea y sale del ciclo.
Ejemplo:
ch := make(chan int)
función anónima() {
ch <- 1
ch <- 2
close(ch)
}()
for v := range ch {
fmt.Println(v) // Imprimirá 1 y 2, luego terminará el ciclo
}
Si el canal está cerrado pero no hay datos, range terminará inmediatamente. Si el canal no está cerrado pero no hay datos, range esperará (se bloqueará) hasta que haya datos o se cierre el canal.