结论:

1. 遍历一个未关闭的channel会造成死循环

2. 即使关闭了一个非空通道,我们仍然可以从通道里面接收到未读取的数据

3. 可以这样理解,close()函数会往channel中压入一条特殊的通知消息,可以用来通知channel接收者不会再收到数据。所以即使channel中有数据也可以close()而不会导致接收者收不到残留的数据

4. channel不需要通过close释放资源,只要没有goroutine持有channel,相关资源会自动释放

实验如图(上面是未执行close()的,造成死锁;下面是执行了close()的,正常遍历结束):

代码如下:

package main
import "fmt"func main() {ch := make(chan int, 10)ch <- 1ch <- 2ch <- 3// 关闭函数非常重要,若不执行close(),那么range将无法结束,造成死循环// close(ch)for v := range ch {fmt.Println(v)}
}

go 关闭通道的必要性相关推荐

  1. Go 知识点(07)— 对已经关闭通道进行读写

    今天我们来看下对已经关闭通道进行读写会发生什么情况. 1. 对已关闭通道进行写操作 看下面代码会输出什么结果? func main() {ch := make(chan string, 1)close ...

  2. Go 学习笔记(25)— 并发(04)[有缓冲/无缓冲通道、WaitGroup 协程同步、select 多路监听通道、close 关闭通道、channel 传参或作为结构体成员]

    1. 无缓冲的通道 无缓冲的通道(unbuffered channel)是指在接收前没有能力保存任何值的通道. 这种类型的通道要求发送 goroutine 和接收 goroutine 同时准备好,才能 ...

  3. java关闭通道_调用map方法后,Java 7文件通道未正确关闭

    我正在研究一个sc2replay解析工具.我在MPQLIB http://code.google.com/p/mpqlib/之上构建它 不幸的是,该工具使用文件通道来读取bzip文件, 并使用map( ...

  4. 客户端关闭服务器收到消息推送消息,【网络编程】——WebSocket打开和关闭通道,消息发送...

    HTML5给Web浏览器带来了全双工TCP链接WebSocket标准服务器的能力.浏览器和可以与服务器创建链接,经过已创建的通讯信道来发送和接收数据而不须要由HTTP协议入额外的开销.javascri ...

  5. Go 学习笔记(24)— 并发(03)[通道特点、通道声明、通道发送/接收/关闭、单向通道]

    1. 通道概念 chan 是 Go 语言里面的一个关键宇,是 channel 的简写,翻译为中文就是通道. goroutine 是 Go 语言里面的并发执行体,通道是 goroutine 之间通信和同 ...

  6. Java 7:在不丢失数据的情况下关闭NIO.2文件通道

    关闭异步文件通道可能非常困难. 如果您将I / O任务提交到异步通道,则需要确保正确执行了任务. 实际上,出于多种原因,这对于异步通道可能是一个棘手的要求. 默认的通道组使用守护进程线程作为工作线程, ...

  7. go语言基于time.After通道超时设计和通道关闭close

    go语言中多个并发程序的数据同步是采用通道来传输,比如v:=<-chan,从通道里读取数据到v,是一个阻塞操作.可是如通道里没有数据写入,就是chan<-data,这样写入通道的操作,在读 ...

  8. 银行宣布关闭第三方支付通道,对我们用支付宝和微信会有影响吗?

    我们平常在生活用微信.支付宝等第三方支付工具的时候,很少会注意到银行和第三方支付平台之间是如何进行结算的,毕竟大家只要用着方便就可以了.而近期,有多家银行,包括中国银行.中信银行.交通银行等,都宣布了 ...

  9. java 套接字关联的通道_Java 通道教程 – NIO 2.0

    # Java 通道教程 – NIO 2.0 > 原文: [https://howtodoinjava.com/java7/nio/java-nio-2-0-channels/](https:// ...

最新文章

  1. 邓力、何晓冬深度解读:多模态智能未来的研究热点
  2. 运算方法和运算部件二
  3. Python 元组 (tuple)
  4. 仿微信公众平台“打标签”功能~~~
  5. 同余方程———扩展欧几里得
  6. Oracle 原理: PL/SQL基础
  7. spring—SpringMVC的请求和响应
  8. Yii 2 —— Backend自动出现登录页
  9. 2022牛客寒假算法基础集训营4 签到题7题
  10. 字节跳动计算机视觉算法工程师面试题(秋招)
  11. TeXLive升级教程
  12. linux以及网络协议
  13. Spring核心方法 refresh 解析
  14. 联想(Lenovo) 小新M7268W 黑白激光无线WiFi打印多功能一体机 出现:打印机故障:显示扫描单元未找到初始位置 或者 扫描单元马达故障 解决办法
  15. Catalan 数之Python演示
  16. ElasticSearch入门:使用ES来实现模糊查询功能
  17. 西安交大城市学院计算机怎么,西安交大城市学院计算机系召开调研汇报会
  18. Premiere 2.0至Premiere CS5.5高清插件MainConcept(已破解)提供115网盘下载地址
  19. Android自定义字母索引
  20. 积分-钉钉考勤-取参与考勤人员

热门文章

  1. CodeForces - 1422F Boring Queries(主席树+线段树/RMQ)
  2. 牛客 - Dress as women(sg定理+位运算)
  3. UVA - 796 Critical Links(tarjan求割边)
  4. POJ - 3662 Telephone Lines(分层图最短路)
  5. DenseNet详述
  6. Treap原理和实现方法
  7. Linux网络编程 | 信号 :信号函数、信号集、统一事件源 、网络编程相关信号
  8. python中的requests模块的使用大全
  9. Python2与Python3之间的区别?
  10. 阿里巴巴:全链路压测体系建设方案的思考与实践