zoukankan      html  css  js  c++  java
  • go channel总结

    1、创建

    无缓冲
    var chs1 = make(chan int)
    var chs2 = make(chan float64)
    var chs3 = make(chan string)
    有缓冲
    var chs1 = make(chan int, 3)
    var chs2 = make(chan float64, 3)
    var chs3 = make(chan string, 3)

    有缓冲和无缓冲的区别:
    写数据时缓冲模式且缓冲未满时可以直接写入,不会阻塞,缓冲满时会阻塞等待对方读,
    无缓冲模式写入会阻塞到对方读完数据
    读数据缓冲模式可以读取缓冲已有的数据,否则需要阻塞等待对方写
    无缓冲模式需要阻塞等待对方写

    2、关闭
    var chs1 = make(chan int)
    close(chs1)

    对关闭后的channel读,chan int 类型返回0,chan bool 返回false,chan string返回空
    也可以这么判断:
    v, ok := <-chs1 //chs1关闭后ok为false
    if ok {
    fmt.Println(v)
    }

    对关闭后的channel写会panic

    3、超时
    channel本身没有超时
    一般这么做:

    ch := make(chan int)
    t := time.After(time.Second * 2)
    select {
    case v, ok := <-ch:
    if ok {
    //do something
    }
    case <-t:
    fmt.Println("timeout")
    }

  • 相关阅读:
    CF321B Solution
    CF722D Solution
    CF729E Solution
    CF1447E Solution
    CF962F Solution
    DropDownList绑定数据
    连接数据库
    jqm随记的东西
    正则表达式过滤超链接内容(.net)
    linq lambda操作list的例子
  • 原文地址:https://www.cnblogs.com/chukuang2004/p/5106591.html
Copyright © 2011-2022 走看看