每天一个知识点: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(通道)有啥特点,需要注意啥?的主要内容,如果未能解决你的问题,请参考以下文章