• [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
  • 相关阅读:
    iOS开发之MapKit
    iOS开发之代码截图
    iOS开发之CoreLocation(二)
    iOS开发之CoreLocation(一)
    iOS开发之静态库.a的制作
    iOS开发之通讯录 AddressBook
    iOS开发之ARC MRC混编
    iOS开发之蓝牙(一)GameKit
    java学习笔记之转换流
    iOS开发之蓝牙(二)CoreBluetooth
  • 原文地址:https://www.cnblogs.com/baylorqu/p/9675286.html
Copyright © 2020-2023  润新知