【GoLang】关于通道Channel 的关闭

在 Go 语言中,通过内置的 close 函数可以关闭一个通道(Channel)。当一个通道被关闭后,我们可以通过在接收操作中测试通道是否关闭来判断通道是否已经到达了它的结束。

关闭通道后,尝试向通道发送数据会引发 panic。然而,从已关闭的通道接收数据直到所有发送的值都被接收之后,才会返回一个零值。

以下是关闭通道的几种方法:

方法一:使用内置的 close 函数




package main
 
import "fmt"
 
func main() {
    channel := make(chan int, 5)
 
    for i := 0; i < 5; i++ {
        channel <- i
    }
 
    close(channel)
 
    for {
        element, ok := <-channel
        if !ok {
            break
        }
        fmt.Println(element)
    }
}

在这个例子中,我们首先创建了一个可以存储5个整数的通道,然后我们向通道中发送5个整数。然后我们关闭通道。然后我们尝试从通道接收数据,如果通道关闭,那么接收操作将返回一个零值,并且第二个值将是 false。我们可以利用这个特性来判断通道是否关闭。

方法二:使用 range 关键字




package main
 
import "fmt"
 
func main() {
    channel := make(chan int, 5)
 
    for i := 0; i < 5; i++ {
        channel <- i
    }
 
    close(channel)
 
    for element := range channel {
        fmt.Println(element)
    }
}

在这个例子中,我们使用 range 关键字来遍历通道。当通道关闭时,range 会自动停止,所以我们不需要手动检查通道是否关闭。

注意:

  1. 只有发送者才能关闭通道,接收者不能关闭通道。如果尝试关闭一个已经被关闭的通道,程序会 panic。
  2. 关闭之后,通道中所有已经存储的值都会被接收。一旦通道关闭,再向通道发送数据会引发 panic。但是,可以继续从通道接收数据,直到通道中所有的值都被接收为止。
最后修改于:2024年08月15日 14:02

评论已关闭

推荐阅读

DDPG 模型解析,附Pytorch完整代码
2024年11月24日
DQN 模型解析,附Pytorch完整代码
2024年11月24日
AIGC实战——Transformer模型
2024年12月01日
Socket TCP 和 UDP 编程基础(Python)
2024年11月30日
python , tcp , udp
如何使用 ChatGPT 进行学术润色?你需要这些指令
2024年12月01日
AI
最新 Python 调用 OpenAi 详细教程实现问答、图像合成、图像理解、语音合成、语音识别(详细教程)
2024年11月24日
ChatGPT 和 DALL·E 2 配合生成故事绘本
2024年12月01日
omegaconf,一个超强的 Python 库!
2024年11月24日
【视觉AIGC识别】误差特征、人脸伪造检测、其他类型假图检测
2024年12月01日
[超级详细]如何在深度学习训练模型过程中使用 GPU 加速
2024年11月29日
Python 物理引擎pymunk最完整教程
2024年11月27日
MediaPipe 人体姿态与手指关键点检测教程
2024年11月27日
深入了解 Taipy:Python 打造 Web 应用的全面教程
2024年11月26日
基于Transformer的时间序列预测模型
2024年11月25日
Python在金融大数据分析中的AI应用(股价分析、量化交易)实战
2024年11月25日
AIGC Gradio系列学习教程之Components
2024年12月01日
Python3 `asyncio` — 异步 I/O,事件循环和并发工具
2024年11月30日
llama-factory SFT系列教程:大模型在自定义数据集 LoRA 训练与部署
2024年12月01日
Python 多线程和多进程用法
2024年11月24日
Python socket详解,全网最全教程
2024年11月27日