Golang channel关闭后是否可以读取剩余的数据详解

 更新时间:2023年09月13日 09:46:57   作者:翔云123456  
这篇文章主要介绍了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被关闭,会跳出循环。

另外,如果channel被关闭后,不能再写入,写入会导致panic。但可以一直读取,读取到的值是类型的零值:

for i:=0;i<10;i++ {
        value := <- ch
        fmt.Println("value:", value)
}

value: 1
value: 2
value: 3
value: 0
value: 0
value: 0
value: 0
value: 0
value: 0
value: 0

到此这篇关于Golang channel关闭后是否可以读取剩余的数据详解的文章就介绍到这了,更多相关Golang channel关闭内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Gin使用swagger生成接口文档的代码示例

    Gin使用swagger生成接口文档的代码示例

    Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful Web 服务,它使用 YAML 或 JSON 格式来定义 API 的结构,本文给大家介绍了Gin使用swagger生成接口文档的代码示例,需要的朋友可以参考下
    2024-06-06
  • 重学Go语言之数组的具体使用详解

    重学Go语言之数组的具体使用详解

    Go的数组是一种复合数据类型,在平时开发中并不常用,更常用的是切片(slice),可以把切片看作是能动态扩容的数组,切片的底层数据结构就是数组,所以数组虽不常用,但仍然有必要掌握
    2023-02-02
  • golang中snappy的使用场合实例详解

    golang中snappy的使用场合实例详解

    在java 和go语言 大字符传达的时候, 采用snappy 压缩 解压缩是最好的方案。下面这篇文章主要给大家介绍了关于golang中snappy使用场合的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下。
    2017-12-12
  • golang 如何获取pem格式RSA公私钥长度

    golang 如何获取pem格式RSA公私钥长度

    这篇文章主要介绍了golang 如何获取pem格式RSA公私钥长度操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • Golang实现读取excel文件并转换为JSON格式

    Golang实现读取excel文件并转换为JSON格式

    本文介绍了如何使用Golang读取Excel文件并将其转换为JSON格式,通过安装excelize依赖和创建readExcelToJSON方法,可以实现这一功能,如果需要转换数据类型,可以修改相应的代码,需要的朋友可以参考下
    2025-03-03
  • Golang实现web文件共享服务的示例代码

    Golang实现web文件共享服务的示例代码

    这篇文章主要介绍了Golang实现web文件共享服务的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-10-10
  • Golang设计模式之责任链模式讲解和代码示例

    Golang设计模式之责任链模式讲解和代码示例

    责任链是一种行为设计模式, 允许你将请求沿着处理者链进行发送, 直至其中一个处理者对其进行处理,本文就详细给大家介绍一下Golang 责任链模式,文中有详细的代码示例,需要的朋友可以参考下
    2023-06-06
  • Golang中的map操作方法详解

    Golang中的map操作方法详解

    这篇文章主要给大家介绍了关于Golang中map操作方法的相关资料,map是一种无序的基于key-value的数据结构,Go语言中map是引用类型,必须初始化才能使用,需要的朋友可以参考下
    2023-11-11
  • golang两种调用rpc的方法

    golang两种调用rpc的方法

    这篇文章主要介绍了golang两种调用rpc的方法,结合实例形式分析了Go语言调用rpc的原理与实现方法,需要的朋友可以参考下
    2016-07-07
  • Go语言常见数据结构的实现详解

    Go语言常见数据结构的实现详解

    这篇文章主要为大家学习介绍了Go语言中的常见数据结构(channal、slice和map)的实现,文中的示例代码简洁易懂,需要的可以参考一下
    2023-07-07

最新评论