每天一个知识点:Go 语言当中 Channel(通道)有啥特点,需要注意啥?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每天一个知识点:Go 语言当中 Channel(通道)有啥特点,需要注意啥?相关的知识,希望对你有一定的参考价值。

参考技术A 使用简单的 make 调用创建的通道叫做无缓冲通道,但 make 还可以接受第二个可选参数,一个表示通道容量的整数。如果容量是 0,make 创建一个无缓冲通道。

无缓冲通道上的发送操作将被阻塞,直到另一个 goroutine 在对应的通道上执行接受操作,这时值传送完成,两个 goroutine 都可以继续执行。相反,如果接受操作先执行,接收方 goroutine 将阻塞,直到另一个 goroutine 在同一个通道上发送一个值。使用无缓冲通道进行的通信导致发送和接受操作 goroutine 同步化。因此,无缓冲通道也称为同步通道。当一个值在无缓冲通道上传递时,接受值后发送方 goroutine 才能被唤醒。

缓冲通道上的发送操作在队列的尾部插入一个元素,接收操作从队列的头部移除一个元素。如果通道满了,发送操作会阻塞所在的 goroutine 直到另一个 goroutine 对它进行接收操作来留出可用的空间。反过来,如果通道是空的,执行接收操作的 goroutine 阻塞,直到另一个 goroutine 在通道上发送数据。

如果给一个 nil 的 channel 发送数据,会造成永远阻塞。

如果从一个 nil 的 channel 中接收数据,也会造成永久阻塞。 给一个已经关闭的 channel 发送数据, 会引起 panic。

从一个已经关闭的 channel 接收数据, 如果缓冲区中为空,则返回一个 零 值。

Go语言知识库

CSDN最近搞了一个主要编程语言图谱+知识库,不错

Go语言的,请点

本文来自:

查看原文:


以上是关于每天一个知识点:Go 语言当中 Channel(通道)有啥特点,需要注意啥?的主要内容,如果未能解决你的问题,请参考以下文章

go语言中数组使用的注意事项和细节

如何看待go语言泛型的最新设计?

Go语言输出打印--排坑

Go 语言自我提升 (三次握手 - 四次挥手 - TCP状态图 - udp - 网络文件传输)

go基础系列——go 数组转字符串

go语言操作符 ^ 和 &^