Go语言实现定时器的方法详解
短信预约 -IT技能 免费直播动态提醒
本文主要介绍了Go语言实现定时器的两个方法,包括一次性定时器(Timer)和周期性定时器(Ticker),一次性定时器:newTimer()创建一个能够往当前通道在持续duration时间之后发送当前时间的Timer。
Timer
Timer
是一种单一事件的定时器,即经过指定的时间后触发一个事件,因为Timer
只执行一次就结束,所以称为单一事件,这个事件通过其本身提供的channel
进行通知触发。
使用示例
package main
import (
"fmt"
"time"
)
func main() {
//1. timer基本使用
timer1 := time.NewTimer(4 * time.Second)
t1 := time.Now()
fmt.Printf("t1:%v\n", t1)
t2 := <-timer1.C
fmt.Printf("t2:%v\n", t2)
fmt.Println("2s到了")
//2. timer只能响应1次, 到截止时间会将时间发给通道
//timer2 := time.NewTimer(time.Second)
//for {
// <-timer2.C
// fmt.Println("时间到", t2)
//}
// 3.timer实现延时的功能
time.Sleep(time.Second)
fmt.Println(time.Now())
timer3 := time.NewTimer(2 * time.Second)
<-timer3.C
fmt.Println("2秒到了")
fmt.Println(time.Now())
<-time.After(2 * time.Second)
fmt.Println("2秒到了")
// 4.停止定时器
timer4 := time.NewTimer(4 * time.Second)
b := timer4.Stop()
if b {
fmt.Println("timer4关闭")
}
// 5.重置定时器
timer5 := time.NewTimer(5 * time.Second)
timer5.Reset(3 * time.Second)
fmt.Println(time.Now())
fmt.Println(<-timer5.C)
time.Sleep(time.Second * 30)
}
Tiker
Tiker是一个定时触发的计时器,它会以一个间隔(interval)往通道发送当前时间,而通道的接收者可以以固定的时间间隔从通道中读取时间:
package main
import (
"fmt"
"time"
)
func main() {
// 1.获取ticker对象
ticker := time.NewTicker(2 * time.Second)
i := 0
// 子协程
go func() {
for {
i++
fmt.Println(<-ticker.C)
if i == 4 {
//停止ticker
ticker.Stop()
}
}
}()
time.Sleep(time.Second * 20)
}
到此这篇关于Go语言实现定时器的方法详解的文章就介绍到这了,更多相关Go语言定时器内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341