Golang Timer的应用(二)

        上一篇说到不同的timer函数在不同的场景下是否有比较好的使用方式,我先列一下time包内的几个函数,主要有以下两类:

重复触发:

        func NewTicker(d Duration) *Ticker , 返回一个会发送timer的channel的Ticker.调用它的Stop可以释放相关的资源。

        func Tick(d Duration) <-chan Time  , Tick 只是对于NewTicker 的一个简单包装,提供了一个获取ticking的channel.当调用者不需要关闭这个Ticker的时候使用它,而且它不能被GC回收, 所以会"泄漏",小心使用。(有点不明白golang 为啥还要提供这个函数)


一次性触发:

         func NewTimer(d Duration) *Timer , 创建一个timer , 当过了duration以后会往它自己的channel 中发送当前时间。

        func After(d Duration) <-chan Time,  当过了duration 时间段后会往channel 中发送当前时间,只有当它到了指定的duration 后, 才会被GC掉。  如果为了保持高效,建议用NewTimer来配合Stop 来做。(这个After又是一个对newtimer 的包装的感觉,不需要你显示的调用Stop)

        func AfterFunc(d Duration, f func()) *Timer, 在等待duration 时间后,在一个goroutine 当中调用f函数。返回值是一个Timer, 可用Timer的stop 来取消调用f函数。

 下面总结几个time 函数调用的例子:

例子一:

go demo(input)

func demo(input chan interface{}) {
    for {
        select {
        case msg <- input:
            println(msg)

        case <-time.After(time.Second * 5):
            println("5s timer")

        case <-time.After(time.Second * 10
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值