[GO]单向channel和应用

var ch1 chan int       //ch1是一个正常的channel,不是单向的

var ch2 chan <- float64     //ch2是一个单向的channel,只用于写float64的数据

var ch3  <- chan  int     //ch3是一个单向的channel,只用于读取int数据

package main

func main() {
    //创建一个channel,双向的
    ch := make(chan int)
    //定义一个单向的只能写的channel
    var writech chan <- int = ch
    //但如果写成下面这样就会报错
    <-writech
    //定义一个单向的只能读的channel
    var readch <- chan int = ch
    //写成下面这样就会有问题
    readch<-555
    //下面都会正常编译通过
    writech <- 666
    <- readch
    //单向无法转换成双向
    var ch2  chan int = writech
}

 它的应用

package main

import "fmt"

//代表此channel只能写,不能读
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() {
    //创建一个双向通道ch
    ch  := make(chan int)

    //生产者,生产数字,写入channel
    go producer(ch) //chennel传参,引用传递

    //消费者,从channel里读取数字、然后打印
    consumer(ch)
}

执行的结果

num =  0
num =  1
num =  4
num =  9
num =  16
num =  25
num =  36
num =  49
num =  64
num =  81
num =  100
原文地址:https://www.cnblogs.com/baylorqu/p/9675286.html