zoukankan      html  css  js  c++  java
  • go语言——channel特点

    知识点

    通道拥有阻塞机制(无缓冲区),有缓冲区同理。

      接收端在发送端数据发送完成之前(通道为nil),处于阻塞状态

      发送端在接收端数据拿走完成之前(通道为满),处于阻塞态

    注意点

    1.struct{}类型不占空间,作为通道的一种信号方式

    2.chan类型为引用类型,故需要进行初始化,申请空间,在通道使用结束后Close()关闭

    3.nil状态不可以进行数据通信

    4.避免在接收端关闭通道,因为不知道发送端是否再发数据,尽量发送端关闭,接收端判断。

    5.形参为单通道类型,实参为双通道类型会默认根据形参类型进行自动转换;不能利用函数声明把单向通道转换成双向通道

    6.单通道类型:<-ch :表示只读通道;ch<-:表示只写通道

    使用实例

    1.利用通道发送一个空结构类型(struct{})实现goroutine的同步机制

    var ch chan struct{}
    
    func test() {
        fmt.Println("test begin ,waitting 1 second...")
        time.Sleep(time.Second)
        fmt.Println("test end")
        ch <- struct{}{}
    }
    
    func main() {
        ch = make(chan struct{}, 1)
        fmt.Println("main begin")
        go test()
        <-ch
        fmt.Println("main end")
    }
  • 相关阅读:
    1491: [NOI2007]社交网络
    Ombrophobic Bovines
    1566: [NOI2009]管道取珠
    1564: [NOI2009]二叉查找树
    1497: [NOI2006]最大获利
    mysql数据库修改字段及新增字段脚本
    NIO
    Lombok用法及标签释义
    idea2017.2延长使用时间
    IDEA 注册码
  • 原文地址:https://www.cnblogs.com/single-dont/p/13550717.html
Copyright © 2011-2022 走看看