zoukankan      html  css  js  c++  java
  • channel

    // 参考:https://www.cnblogs.com/wdliu/p/9272220.html
    channel使用
    定义和声明
    
    
    var readOnlyChan <-chan int            // 只读chan
    var writeOnlyChan chan<- int           // 只写chan
    var mychan  chan int                     //读写channel
    //定义完成以后需要make来分配内存空间,不然使用会deadlock
    mychannel = make(chan int,10)
    
    //或者
    read_only := make (<-chan int,10)//定义只读的channel
    write_only := make (chan<- int,10)//定义只写的channel
    read_write := make (chan int,10)//可同时读写
    复制代码
     读写数据
    
    需要注意的是:
    
    管道如果未关闭,在读取超时会则会引发deadlock异常
    管道如果关闭进行写入数据会pannic
    当管道中没有数据时候再行读取或读取到默认值,如int类型默认值是0
    ch <- "wd"  //写数据
    a := <- ch //读取数据
    a, ok := <-ch  //优雅的读取数据
    循环管道
    
    需要注意的是:
    
    使用range循环管道,如果管道未关闭会引发deadlock错误。
    如果采用for死循环已经关闭的管道,当管道没有数据时候,读取的数据会是管道的默认值,并且循环不会退出。
    
    package main
    
    import (
        "fmt"
        "time"
    )
    
    
    func main() {
        mychannel := make(chan int,10)
        for i := 0;i < 10;i++{
            mychannel <- i
        }
        close(mychannel)  //关闭管道
        fmt.Println("data lenght: ",len(mychannel))
        for  v := range mychannel {  //循环管道
            fmt.Println(v)
        }
        fmt.Printf("data lenght:  %d",len(mychannel))
    }
    
    带缓冲区channe和不带缓冲区channel
    带缓冲区channel:定义声明时候制定了缓冲区大小(长度),可以保存多个数据。
    
    不带缓冲区channel:只能存一个数据,并且只有当该数据被取出时候才能存下一个数据。
    
    ch := make(chan int) //不带缓冲区
    ch := make(chan int ,10) //带缓冲区
    
    
  • 相关阅读:
    为 WordPress 标签添加 rel="nofollow" 属性
    Discuz X3.2 SEO设置 title 不支持空格的解决方法
    LANMP 如何禁止访问 .htaccess 文件
    Discuz 哪些文件和文件夹需要777权限
    WordPress 模板常用函数
    CSS控制 table 的 cellpadding,cellspacing
    从 Typecho 自定义字段的调用代码看去
    Linux 服务器如何修改 DNS
    Linux 服务器如何禁止 ping 以及开启 ping
    Asp.Net 加载不同项目程序集
  • 原文地址:https://www.cnblogs.com/lajiao/p/12637208.html
Copyright © 2011-2022 走看看