golang中单向管道应用
一直听说代码即注释的概念,但是一直没有一个具体的概念,看到golang中通过单向chan的来做代码即注释的例子
单向管道
对于单向channel我们可以这样定义
- 发送值的通道类型
chan<- T - 接收值的通道类型
<-chan T
中单向管道应用场景
在os/signal 中使用了如下定义Notify函数只会对该通道发送元素值,而不会从该通道接收值。
func Notify(c chan<- os.Signal, sig ...os.Signal)
这里,问题来了,对于单向的通道如何来应用那?毕竟只向一个通道发送值,而没有接收过程是没有意义的。
单向管道应用
- 在func Notify(c chan<- os.Signal, sig …os.Signal)中,chan<- 表达了该函数只会向通道发送数据。
我们在调用此函数的时候,从表面上看需要传入一个只能发送元素不能接收元素的通道。但是传入这样的通过是错误的。 - 函数的传入通道应该是一个双向通道
调用过程中,我们应向函数传入双向通道并自觉遵守这个隐性规定。传入的双向通道会转为一个单向通道。
通过golang的语法Notify函数以声明的方式传递了第一个参数的意义