zoukankan      html  css  js  c++  java
  • golang channel关闭后,是否可以读取剩余的数据

    golang channel关闭后,其中剩余的数据,是可以继续读取的。

    请看下面的测试例子。

    创建一个带有缓冲的channel,向channel中发送数据,然后关闭channel,最后,从channel中读取数据,输出结果。

    package main
    
    import (
            "fmt"
    )
    
    
    func main(){
    
            ch := make(chan int, 3)
    
            ch <-1
            ch <-2
            ch <-3
    
            close(ch)
            for value := range ch {
                    fmt.Println("value:", value)
            }
    
    }
    

    output:

    value: 1
    value: 2
    value: 3
    

    可以看到,channel关闭之后,仍然可以从channel中读取剩余的数据,直到数据全部读取完成。

    多说一点,对于一个关闭的channel,如果继续向channel发送数据,会引起panic。

    如果继续读数据,得到的是零值(对于int,就是0)。

    判断一个channel的方式有两种:
    一种方式:

    value, ok := <- ch
    

    ok是false,就表示已经关闭。

    另一种方式,就是上面例子中使用的方式:

    for value := range ch {
        
    }
    

    如果channel被关闭,会跳出循环。

  • 相关阅读:
    Grunt 实现浏览器实时刷新
    Node环境搭建
    前端项目三方库管理
    Node项目包管理器
    前端开发利器
    面向对象目录
    Java 面向对象(十四)
    Java 面向对象(十三)
    Java 面向对象(十二)
    Java 面向对象(十)
  • 原文地址:https://www.cnblogs.com/lanyangsh/p/11296355.html
Copyright © 2011-2022 走看看