美文网首页
for range 和channl

for range 和channl

作者: ES_KYW | 来源:发表于2020-09-18 14:40 被阅读0次

    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
    

    相关文章

      网友评论

          本文标题:for range 和channl

          本文链接:https://www.haomeiwen.com/subject/qnljyktx.html