知识卡片

单向通道类型作为编译期契约

专业/工作 · 485

内容

通道默认双向,但可以在类型层面限定成只发送(chan<- Type)或只接收(<-chan Type)。发散:双向通道可以隐式转换成单向通道(反过来不行),所以make(chan T)创建的永远是双向的,单向类型通常出现在函数签名上,用来对外收窄能力,这和”参数用小接口、返回用具体类型”的思路是同一种”对外暴露的能力应该刚好够用”的设计原则。

参考来源

- 位置:《Go语言程序设计》第7章《并发编程》(源文件:_epub-src/OEBPS/text00041.html) - 结论依据:原文在该章节围绕“通道默认双向,但可以在类型层面限定成只发送(`chan<-Type`)或只接收(`<-chanType`)”给出定义、示例或限制条件;摘录中的术语、代码片段或对比关系直接支撑本卡片的结论。 - 原始内容:从里面接收数据。但是我们经常将一个通道作为参数进行传递而只希望对方是单向使用的,要么只让它发送数据,要么只让它接收数据,这个时候我们可以指定通道的方向。例如, chan<- Type 类型就是一个只发送数据的通道。我们之前的章节里并没有这样用过,一来没这个必要,用 chan Type 就行,二来还有很多其他的东西要学习。但是从现在开始,我…