《Go in Action 2015.11.pdf》之Conncurrency patterns

Runner

var complete chan error = make(chan error)
var interrupt chan os.Signal = make(chan os.Signal, 1)

func genNil() error {
    time.Sleep(time.Second)
    fmt.Println("finish")
    complete <- nil
    return nil
}

func main() {
    signal.Notify(interrupt, os.Interrupt)
    go genNil()
    select {
    case err, ok := <-complete:
        fmt.Printf("%v", err)
        fmt.Printf("%v", ok)
    case <-interrupt:
        signal.Stop(interrupt)
    }

}

运行结果
可以看出,对于非缓存通道传入nil后,接受nil,ok为true。

var interrupt chan os.Signal = make(chan os.Signal, 1)

通道interrupt为缓存为1的信号量通道,根据signal文档中的描述,runtime是非阻塞写入信号量通道的,也就是说,如果该通道中已经满了,后续的信号会被丢弃。

后记

之前一直在优快云上写文章,后面会逐步转换到简书上,还请大家多多支持。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值