go rutina para rango sobre canales
He estado trabajando en Golang durante mucho tiempo. Pero todavía estoy enfrentando este problema, aunque sé la solución a mi problema. Pero nunca descubrí por qué está sucediendo.
Por ejemplo, si tengo una situación de canalización para canales entrantes y salientes como a continuación:
package main
import (
"fmt"
)
func main() {
for n := range sq(sq(gen(3, 4))) {
fmt.Println(n)
}
fmt.Println("Process completed")
}
func gen(nums ...int) <-chan int {
out := make(chan int)
go func() {
for _, n := range nums {
out <- n
}
close(out)
}()
return out
}
func sq(in <-chan int) <-chan int {
out := make(chan int)
go func() {
for n := range in {
out <- n * n
}
close(out)
}()
return out
}
No me da una situación de punto muerto. Pero si elimino la rutina go dentro del código saliente como se muestra a continuación:
func sq(in <-chan int) <-chan int {
out := make(chan int)
for n := range in {
out <- n * n
}
close(out)
return out
}
Recibí un error de punto muerto. ¿Por qué es así que recorrer los canales usando el rango sin ir a la rutina da un punto muerto?