GO语言-channel-定时器

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第18天,点击查看活动详情

定时器

channel是GO语言中非常核心的机制,定时器的内部很多就是channel实现的。 go //创建定时器 func NewTimer(d Duration) *Timer type Timer struct{ C <-chan Time r runtimeTimer } // 定时器停止 func (t *Timer) Stop() bool 我们可以先了解一下定时器相关的结构体以及API,Timer是GO语言定时器的结构,它内部的一个重要元素就是C ,这是一个只读的channel。NewTimer构造定时器,Duration代表定时的时刻,在d时间间隔内channel会收到一条Time类型的数据Stop结束定时器。Timer是一个一次性定时器,当收到Time类型后,他就会随着失效。

## 周期类的定时任务 在GO语言中可以使用Ticker来实现周期类的定时任务 go func NewTicker(d Duration)*Ticker type Ticker struct{ C <-chan Time r runtimeTimer } //定时器停止 func (t *Ticker)Stop() NewTicker负责构造周期性定时器,每个d个时间间隔,就会收到一个Time类型数据。Ticker是周期性定时器结构体,核心依旧是依靠channel来实现。 ## 实例 用定时器来实现一个倒计时的代码,我们可以使用一个周期性定时器来实现定时任务。一下为主要代码 ```go

func finish(){ fmt.Println("结束") } func main (){ ticker:=time.NewTicker(Time.Second) num:=5 for{ <-ticker.C //读取但无人接收 fmt.Println(num) num-- if num==0{ break } }

ticker.Stop()
finish()
}

```

在实例中使用了一个<-ticker.C 的语句去处理channel,在GO语言中是被允许的。可以不设定变量去接收channel中的数据。我们关心的是channel是否产生了数据,并不关心数据到底是什么。

总结

通过定时器的实现,更加了解了GO语言的特性以及channel的使用以及一些巧妙的使用方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值