• 3.9 Go之单向通道


    3.9 Go之单向通道

    什么是单向通道

    channel本身支持读写操作,单向通道顾名思义是指一个通道只能读或者只能写

    注意:

    如果一个通道只能读或者只能写将毫无意义。所以单向channel的概念只是对channel的一种使用限制

    单向通道的声明格式

    关键点:

    <指向哪儿数据往哪儿流

    var 通道实例 chan<- 元素类型 // 只能写入(箭头指向通道意思是只能流入通道)
    var 通道实例 <-chan 元素类型 // 只能读取(箭头指出通道意思是只能流出通道)
    • 元素类型:通道包含的元素类型。

    • 通道实例:声明的通道变量。

    单通道使用例子

    package main

    func main() {
       // 声明一个通道
       ch := make(chan int)
       
       // 声明一个单向通道变量--->这里面不是很理解后面的赋值是什么意思,将ch赋值给chSendOnly在实际调用变量的时候用的还是chSendOnly
       var chSendOnly <-chan int = ch

       // 声明单项只接收通道
       var cnRecvOnly chan<- int = ch
    }

    time包中的单向通道

    timerTimer类型:

    type Timer struct {
       C <-chan Time
       /*
       C通道的类型就是一种只能读取的单向通道。如果此处不进行通道方向约束,一旦外部向通道写入数据,将会造成其他使用到计时器的地方逻辑产生混乱。
       */
       r runtimeTimer
    }

    timer包中的计时器返回timer实例:

    timer := time.NewTimer(time.Second)

    优点:

    单向通道有利于代码接口的严谨性

    关闭channel

    • 如何关闭channel

    • 如何判断channel已经被关闭

    如何关闭channel

    调用go包下的close()函数:

    close(ch)
    如何判断channel已经被关闭
    x, ok := <-ch

    观察ok变量返回的布尔量即可

     

  • 相关阅读:
    numpy之数组属性与方法
    numpy之数组创建
    matplotlib之直方图
    matplotlib之条形图
    matplotlib之散点图
    matplotlib之折线图
    Kettle使用教程之数据同步
    Kettle使用教程之Job使用
    Kettle使用教程之安装与资源库的创建
    Ubuntu16.04配置单机版Zookeeper和Kafka
  • 原文地址:https://www.cnblogs.com/JunkingBoy/p/16033288.html
Copyright © 2020-2023  润新知