for range 和channl

2020-09-18  本文已影响0人  ES_KYW

for range会一直读取数据直到,chan关闭。无缓冲chan相当于一个开关,不存储数据,同步阻塞类型,如果没有for rang不断读取数据,chan不会有数据不断流入流出

// channel 无缓存类型不能读写值,会同步阻塞,相当于一个开关
func producter(numbs ...int) <-chan int {
    out := make(chan int)
    go func() {
        defer close(out)
        for _,n := range numbs{
            out <- n
        }
    }()
    return out
}
func square(out <-chan int) <-chan int{
    in := make(chan int)
    go func() {
        defer close(in)
        for n := range out{
            //fmt.Println(n) 验证如果没有rang读取的情况是否阻塞
            in <-n*n
        }
    }()
    return in
}
func main() {
    out := producter(1,2,3,4)
    in := square(out)
    i := 0
    // range会一直获取数据直到chan关闭
    for ret := range in {
        i++
        fmt.Println(i,ret)
    }
        //fmt.Println(i,in)
    //fmt.Println(i,<-in)
}
1 1
2 4
3 9
4 16
上一篇下一篇

猜你喜欢

热点阅读