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")
    }

  • 相关阅读:
    C语言寒假大作战04
    C语言寒假大作战03
    C语言寒假大作战02
    C语言寒假大作战01
    C语言I作业12—学期总结
    C语言I博客作业11
    C语言I博客作业10
    预习非数值数据的编码方式
    计算机组成与系统结构作业01
    C语言||作业01
  • 原文地址:https://www.cnblogs.com/chukuang2004/p/5106591.html
Copyright © 2011-2022 走看看