Pipeline模式
//如要处理一组数字 过滤偶数->求平方->输出
// 1 将数据转换为 Channel
func gen(nums ...int) <-chan int {
out := make(chan int)
go func() {
for _, num := range nums {
out <- num
}
close(out)
}()
return out
}
// 2 过滤器 只保留偶数
func filterEven(in <-chan int) <-chan int {
out := make(chan int)
go func() {
for n := range in {
if n%2 == 0 {
out <- n
}
}
close(out)
}()
return out
}
// 3 求平方
func sq(in <-chan int) <-chan int {
out := make(chan int)
go func() {
for n := range in {
out <- n * n
}
close(out)
}()
return out
}
func main() {
// 建立流水线:gen -> filter -> sq
pipeline := sq(filterEven(gen(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)))
for n := range pipeline {
println(n)
}
}