美文网首页
单项的channel

单项的channel

作者: 测试探索 | 来源:发表于2020-08-18 06:11 被阅读0次
    背景

      默认情况下,通道是双向的,也就是,既可以往里面发送数据也可以同里面接收数据。
      但是我们经常见一个通道作为参数进行传递而值希望对方是单向使用的,要么只让它发送数据,要么只汤它接收数据,这时候我们可以指定通道的方向。

    单向channel变量的声明非常简单
    var ch1 chan int //ch1是一个正常的channel,不是单向的
    var ch2 chan<- float64    //ch2是单向的channel,只用于写float64数据
    var ch3 <- chan int      //ch3是单向的channel,只用于读取int数据
    
    package main
    
    import "fmt"
    
    //此通道只能写,不能读
    func producer(out chan<- int) {
        for i := 0; i < 10; i++ {
            out <- i * i
        }
        close(out)
    }
    
    //此通道只能读,不能写
    func consumer(in <-chan int) {
        for num := range in {
            fmt.Println("num  = ", num)
        }
    }
    func main() {
    
        //  创建一个channel,双向的
        ch := make(chan int)
    
        //  生产者,生产数字,写入channel
        //  新开一个携程
        go producer(ch) // channel传参,引用传递
    
        //  消费者,从channel读取内容,打印
        consumer(ch)
    }
    #结果
    num  =  0
    num  =  1
    num  =  4
    num  =  9
    num  =  16
    num  =  25
    num  =  36
    num  =  49
    num  =  64
    num  =  81
    

    相关文章

      网友评论

          本文标题:单项的channel

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