go rotina para o alcance sobre canais
Estive trabalhando em Golang há muito tempo. Mas ainda estou enfrentando esse problema, embora conheça a solução para o meu problema. Mas nunca descobri por que isso está acontecend
Por exemplo, se eu tiver uma situação de pipeline para canais de entrada e saída como abaixo:
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
}
Não me dá uma situação de impasse. Mas se eu remover a rotina go dentro do código de saída como abaixo:
func sq(in <-chan int) <-chan int {
out := make(chan int)
for n := range in {
out <- n * n
}
close(out)
return out
}
Eu recebi um erro de deadlock. Por que é assim que fazer um loop nos canais usando a faixa sem rotina de ir dá um impasse.