管道
通道可以分为两个方向,一个是读,另一个是写,假如一个函数的输入参数和输出参数都是相同的chan类型,则该函数可以调用自己,最终形成一个调用链。当然多个具有相同参数类型的函数也能组成一个调用链,这很像UNIX系统的管道,是一个有类型的管道。
下面通过具体的示例演示G0程序这种链式处理能力。
package main
import "fmt"
func main() {
in := make(chan int)
//初始化输入参数
go func() {
for i := 0; i < 10; i++ {
in <- i
}
close(in)
}()
//连续调用3次chan,相当于把in中的每个元素都加3
out := chain(chain(chain(in)))
for v := range out {
fmt.Println(v)
}
}
//chain函数的输入参数和输出参数类型相同,都是chan int类型
//chain函数的功能是将chan内的数据统一加一
func chain(in chan int) chan int {
out := make(chan int)
go func() {
for v := range in {
out <- 1 + v
}
close(out)
}()
return out
}
//结果
3
4
5
6
7
8
9
10
11
12
888

被折叠的 条评论
为什么被折叠?



