如何在不读取 Go Channel 的情况下检查它是否已关闭?
Nov 14, 2024 pm 04:11 PM如何在不读取通道的情况下检查通道是否关闭?
在 Go 中使用通道时会出现这个问题,此时必须确定通道关闭而不阻塞。在提供的代码示例中,希望在相应的工作进程退出时从切片中删除通道。
问题
在worker() while 中关闭通道尝试在controller()中写入它会导致恐慌。使用互斥锁来保护此操作会导致死锁。为通道分配更大的缓冲区也不是一个可行的解决方案。
建议的解决方案
要解决此问题,建议worker() 在以下情况下关闭通道它退出了。然后,controller() 可以检查关闭的通道并跳过对它们的写入。然而,目前 Go 中没有内置函数可以在不读取通道的情况下检查通道关闭情况。
可能的解决方法
- 紧急恢复: 虽然不理想,但可以通过尝试写入通道并恢复引发的恐慌来粗暴地检查通道关闭情况。但是,这种方法不适用于读取通道。
- 使用指示器读取通道:使用 v, ok :=
以上是如何在不读取 Go Channel 的情况下检查它是否已关闭?的详细内容。更多信息请关注PHP中文网其他相关文章!
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门文章
仓库:如何复兴队友
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
击败分裂小说需要多长时间?
3 周前
By DDD
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 周前
By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
公众号网页更新缓存难题:如何避免版本更新后旧缓存影响用户体验?
3 周前
By 王林

热门文章
仓库:如何复兴队友
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
击败分裂小说需要多长时间?
3 周前
By DDD
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 周前
By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
公众号网页更新缓存难题:如何避免版本更新后旧缓存影响用户体验?
3 周前
By 王林

热门文章标签

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)