You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go语言中不保存接收结果的通道读取操作(如<-doneC)的作用是什么?

Go语言无接收变量通道操作<-doneC的作用

这种写法是Go并发编程中最常用的信号等待/同步控制模式,你给出的示例代码中这个操作的逻辑如下:

  • rest.XReceive返回的doneC是一个信号通道,通常为chan struct{}类型(空结构体不占用内存空间,仅用作信号传递),由内部异步执行的goroutine持有
  • 代码执行到<-doneC时会阻塞当前goroutine,直到以下两种情况之一发生才会继续往下走:
    • 持有doneC的内部goroutine执行完任务后,向doneC发送了信号值
    • 持有doneC的内部goroutine执行完任务后,直接关闭了doneC
  • 因为这里只需要知道「异步任务已经完成」这个事件本身,不需要获取通道传递的具体内容,所以不需要定义变量存储接收结果

常见的同类使用场景还有:

  • 等待多个goroutine全部执行完成(可以替代sync.WaitGroup的部分场景)
  • 监听程序退出信号,阻塞主goroutine防止程序直接退出
  • 实现定时器、超时控制的阻塞等待逻辑

如果你碰到的doneC是带缓冲的通道,这种写法也可以用来消费掉通道中多余的信号,避免通道阻塞影响其他逻辑

内容的提问来源于stack exchange,提问作者the_big_blackbox

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 07:48:04