golang 单向管道使用

golang中单向管道应用

一直听说代码即注释的概念,但是一直没有一个具体的概念,看到golang中通过单向chan的来做代码即注释的例子

单向管道

对于单向channel我们可以这样定义

  • 发送值的通道类型
    chan<- T
  • 接收值的通道类型
    <-chan T

中单向管道应用场景

在os/signal 中使用了如下定义Notify函数只会对该通道发送元素值,而不会从该通道接收值。

func Notify(c chan<- os.Signal, sig ...os.Signal)

https://github.com/golang/go/blob/master/src/os/signal/signal.go#L105

这里,问题来了,对于单向的通道如何来应用那?毕竟只向一个通道发送值,而没有接收过程是没有意义的。

单向管道应用

  • 在func Notify(c chan<- os.Signal, sig …os.Signal)中,chan<- 表达了该函数只会向通道发送数据。
    我们在调用此函数的时候,从表面上看需要传入一个只能发送元素不能接收元素的通道。但是传入这样的通过是错误的。
  • 函数的传入通道应该是一个双向通道
    调用过程中,我们应向函数传入双向通道并自觉遵守这个隐性规定。传入的双向通道会转为一个单向通道。

通过golang的语法Notify函数以声明的方式传递了第一个参数的意义

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值