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函数以声明的方式传递了第一个参数的意义