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

  • 相关阅读:
    一手遮天 Android
    一手遮天 Android
    一手遮天 Android
    一手遮天 Android
    一手遮天 Android
    一手遮天 Android
    一手遮天 Android
    一手遮天 Android
    一手遮天 Android
    一手遮天 Android
  • 原文地址:https://www.cnblogs.com/chukuang2004/p/5106591.html
Copyright © 2020-2023  润新知