• 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")
    }
  • 相关阅读:
    MySQL学习笔记(六):索引
    正则表达式基础知识,持续更新…
    js改变盒子大小(上下左右)分析
    表单自定义样式
    js拖拽分析
    javascript右键菜单分析
    简要分析javascript的选项卡和轮播图
    表单联动的总结
    浅显总结ASCII Unicode UTF-8的区别
    瀑布流知识的延伸
  • 原文地址:https://www.cnblogs.com/single-dont/p/13550717.html
Copyright © 2020-2023  润新知