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关闭内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 一文带你掌握Go语言运算符的使用

    一文带你掌握Go语言运算符的使用

    运算符用于在程序运行时执行数学或逻辑运算。Go 语言内置的运算符有:算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符、其他运算符。本文将带大家详细了解一下这些运算符的使用,感兴趣的可以了解一下
    2022-04-04
  • Go语言题解LeetCode1260二维网格迁移示例详解

    Go语言题解LeetCode1260二维网格迁移示例详解

    这篇文章主要为大家介绍了Go语言题解LeetCode1260二维网格迁移示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • 一文总结Go语言切片核心知识点和坑

    一文总结Go语言切片核心知识点和坑

    都说Go的切片用起来丝滑得很,Java中的List怎么用,切片就怎么用,作为曾经的Java选手,因为切片的使用不得当,喜提缺陷若干,本文就给大家总结一下Go语言切片核心知识点和坑,需要的朋友可以参考下
    2023-06-06
  • 一文详解Golang中的切片数据类型

    一文详解Golang中的切片数据类型

    这篇文章主要介绍了一文详解Golang中的切片数据类型,切片是一个种特殊的数组。是对数组的一个连续片段的引用,所以切片是一个引用类型
    2022-09-09
  • Go语言实现的简单网络端口扫描方法

    Go语言实现的简单网络端口扫描方法

    这篇文章主要介绍了Go语言实现的简单网络端口扫描方法,实例分析了Go语言网络程序的实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-02-02
  • Golang使用ini库读取配置详情

    Golang使用ini库读取配置详情

    这篇文章主要介绍了Golang使用ini库读取配置详情,go-ini是一个非常方便、高效的go配置文件操作库。使用它在项目中读取和修改配置文件,下文相关资料需要的小伙伴可可以参考一下
    2022-04-04
  • Golang 中的可测试示例函数(Example Function)详解

    Golang 中的可测试示例函数(Example Function)详解

    这篇文章详细讲解了 Golang 中的可测试示例函数,示例函数类似于单元测试函数,但没有  *testing 类型的参数,编写示例函数也是很容易的,本文就通过代码示例给大家介绍一下Golang的可测试示例函数,需要的朋友可以参考下
    2023-07-07
  • GO语言的IO方法实例小结

    GO语言的IO方法实例小结

    这篇文章主要介绍了GO语言的IO方法实例小结,Docker的火爆促成了当下新兴的Go语言人气的大幅攀升,需要的朋友可以参考下
    2015-10-10
  • Go快速开发一个RESTful API服务

    Go快速开发一个RESTful API服务

    这篇文章主要为大家介绍了Go快速开发一个RESTful API服务,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • Golang gin跨域解决方案示例

    Golang gin跨域解决方案示例

    这篇文章主要为大家介绍了Golang gin跨域解决方案,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-04-04

最新评论