9.10.1 Channel 容量

虽然通道不是技术上的集合类型,例如像数组,但它的行为或多或少像一个。特别是 FIFO 队列。通道的大小,或通道中缓冲区的大小,称为 "容量"。

可以使用内建函数 make 创建新的通道值,它将 chan 类型和容量作为两个参数。例如,

ch := make(chan int, 100)

新创建并初始化的 chan int 类型的通道 ch 具有容量 100。在不从中检索任何值的情况下,可以向该通道发送多达 100 个 int 值。当缓冲区中的项数达到通道的容量时,通道将 "阻塞",也就是通道已满时。

当我们 "接收" 非空通道的值时,该值将从通道中删除。通道确实行为类似于队列数据结构。

还可以通过指定 0 容量或在 make 函数调用中省略第二个参数来创建无缓冲通道。例如,

unbuff := make(chan int)

对于无缓冲通道,例如本示例中的 unbuff,只有当发送者和接收者都准备发送值并接收时,才能成功进行通信。

可以使用内建函数 close 关闭通道。发送者和接收者都无法在已关闭的通道上发送/接收值。

最后更新于