0

0

Go 中使用 range 遍历已关闭的通道以安全接收全部值

聖光之護

聖光之護

发布时间:2026-01-08 16:56:44

|

147人浏览过

|

来源于php中文网

原创

Go 中使用 range 遍历已关闭的通道以安全接收全部值

go 中,可通过 `for range channel` 语法简洁、安全地遍历通道中所有已发送且未被接收的值,该循环自动在通道关闭后终止,无需手动检查是否关闭或处理零值。

Go 的通道(channel)是协程间通信的核心机制,而正确、惯用地消费通道数据至关重要。你原本通过 msg, ok := for range 语句直接作用于通道。

当对通道使用 for range 时,循环会持续接收值,直到通道被显式关闭(close(c)),此时循环自动退出。每次迭代中,变量(如 msg)直接接收通道中下一个成功发送的值,无需额外的布尔状态判断,代码更清晰、不易出错。

以下是优化后的完整示例:

剪刀手
剪刀手

全自动AI剪辑神器:日剪千条AI原创视频,零非原创风险,批量高效制作引爆流量!免费体验,轻松上手!

下载
package main

import "fmt"

func pinger(c chan string) {
    for i := 0; i < 3; i++ {
        c <- "ping"
    }
    close(c) // 必须关闭,否则 range 将永久阻塞
}

func main() {
    c := make(chan string)

    go pinger(c)

    for msg := range c { // ✅ 推荐写法:简洁、安全、语义明确
        fmt.Println(msg)
    }
}

关键注意事项:

  • 必须关闭通道:若生产者未调用 close(c),for range c 将一直阻塞,导致程序挂起;
  • 仅适用于接收端:range 只能用于从通道接收,不可用于发送;
  • 禁止重复关闭:对已关闭通道再次调用 close() 会引发 panic;
  • 关闭前确保无并发写入:应在所有发送操作完成后关闭,通常由发送方(goroutine)负责关闭,避免竞态。

总结:for msg := range ch 是 Go 中遍历通道的标准惯用法,它将“接收 + 关闭检测”逻辑内聚封装,显著提升代码可读性与健壮性,应作为首选实践。

相关专题

更多
Golang channel原理
Golang channel原理

本专题整合了Golang channel通信相关介绍,阅读专题下面的文章了解更多详细内容。

244

2025.11.14

golang channel相关教程
golang channel相关教程

本专题整合了golang处理channel相关教程,阅读专题下面的文章了解更多详细内容。

342

2025.11.17

c++主流开发框架汇总
c++主流开发框架汇总

本专题整合了c++开发框架推荐,阅读专题下面的文章了解更多详细内容。

3

2026.01.09

c++框架学习教程汇总
c++框架学习教程汇总

本专题整合了c++框架学习教程汇总,阅读专题下面的文章了解更多详细内容。

7

2026.01.09

学python好用的网站推荐
学python好用的网站推荐

本专题整合了python学习教程汇总,阅读专题下面的文章了解更多详细内容。

11

2026.01.09

学python网站汇总
学python网站汇总

本专题整合了学python网站汇总,阅读专题下面的文章了解更多详细内容。

1

2026.01.09

python学习网站
python学习网站

本专题整合了python学习相关推荐汇总,阅读专题下面的文章了解更多详细内容。

4

2026.01.09

俄罗斯手机浏览器地址汇总
俄罗斯手机浏览器地址汇总

汇总俄罗斯Yandex手机浏览器官方网址入口,涵盖国际版与俄语版,适配移动端访问,一键直达搜索、地图、新闻等核心服务。

9

2026.01.09

漫蛙稳定版地址大全
漫蛙稳定版地址大全

漫蛙稳定版地址大全汇总最新可用入口,包含漫蛙manwa漫画防走失官网链接,确保用户随时畅读海量正版漫画资源,建议收藏备用,避免因域名变动无法访问。

14

2026.01.09

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Go 教程
Go 教程

共32课时 | 3.5万人学习

Go语言实战之 GraphQL
Go语言实战之 GraphQL

共10课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号