golang定时器


Posted in Golang onApril 14, 2022

定时器1-"*/5 * * * * *"

package main
import (
	"fmt"

	"github.com/robfig/cron"
)
//主函数
func main() {
	cron2 := cron.New() //创建一个cron实例
	//执行定时任务(每5秒执行一次)
	err:= cron2.AddFunc("*/5 * * * * *", print5)
	if err!=nil{
		fmt.Println(err)
	}
	//启动/关闭
	cron2.Start()
	defer cron2.Stop()
	select {
	//查询语句,保持程序运行,在这里等同于for{}
	}
}
//执行函数
func print5()  {
	fmt.Println("每5s执行一次cron")
}

设置说明

┌─────────────second 范围 (0 - 60)
 │ ┌───────────── min (0 - 59)
 │ │ ┌────────────── hour (0 - 23)
 │ │ │ ┌─────────────── day of month (1 - 31)
 │ │ │ │ ┌──────────────── month (1 - 12)
 │ │ │ │ │ ┌───────────────── day of week (0 - 6) (0 to 6 are Sunday to
 │ │ │ │ │ │                  Saturday)
 │ │ │ │ │ │
 │ │ │ │ │ │
 * * * * * *

星号(*) :表示 cron 表达式能匹配该字段的所有值。如在第5个字段使用星号(month),表示每个月

斜线(/):表示增长间隔,如第2个字段(minutes) 值是 3-59/15,表示每小时的第3分钟开始执行一次,之后 每隔 15 分钟执行一次(即 3(3+0*15)、18(3+1*15)、33(3+2*15)、48(3+3*15) 这些时间点执行),这里也可以表示为:3/15

逗号(,):用于枚举值,如第6个字段值是 MON,WED,FRI,表示 星期一、三、五 执行

连字号(-):表示一个范围,如第3个字段的值为 9-17 表示 9am 到 5pm 直接每个小时(包括9和17)

问号(?):只用于 日(Day of month) 和 星期(Day of week),表示不指定值,可以用于代替 *

定时器2-Timer-Ticker

Timer  //时间到了产生一次事件
Ticker  //时间到了循环产生事件

Timer-只执行一次

package main
import (
	"fmt"
	"time"
)
func main() {
	//创建一个定时器,设置时间为2s,2s后,往time通道写内容(当前时间)
	timer := time.NewTimer(2 * time.Second)
	fmt.Println("当前时间:", time.Now())
	//2s后,往timer.C写数据,有数据后,就可以读取
	t := <-timer.C //channel没有数据前后阻塞
	fmt.Println("t = ", t)
}

Ticker-循环执行

package main
import (
	"fmt"
	"time"
)
//验证time.NewTimer(),时间到了,只会响应一次
func main() {
	timer := time.NewTicker(1 * time.Second)
	for {
		<-timer.C
		fmt.Println("时间到")
	}
}

结果:

时间到
时间到
时间到
时间到

Timer延时功能

time.NewTimer(2 * time.Second)  //相当于time.Sleep(2 * time.Second)
func main() {
	//延时2s后打印一句话
	timer := time.NewTimer(2 * time.Second)
	<-timer.C
	fmt.Println("时间到")
}
func main() {
	<-time.After(2 * time.Second) //定时2s,阻塞2s, 2s后产生一个事件,往channel写内容
	fmt.Println("时间到")
}

停止和重置定时器

ok := timer.Reset(1 * time.Second) //重新设置为1s
timer.Stop() //停止定时器

停止:

func main() {
	timer := time.NewTimer(3 * time.Second)
	go func() {
		<-timer.C
		fmt.Println("子协程可以打印了,因为定时器的时间到")
	}()
	timer.Stop() //停止定时器
	for {
	}
}

重置:

func main() {
	timer := time.NewTimer(3 * time.Second)
	ok := timer.Reset(1 * time.Second) //重新设置为1s
	fmt.Println("ok = ", ok)
	<-timer.C
	fmt.Println("时间到")
}

定时器Ticker使用

package main
import (
	"fmt"
	"time"
)
func main() {
	ticker := time.NewTicker(1 * time.Second)
	i := 0
	for {
		<-ticker.C
		i++
		fmt.Println("i = ", i)
		if i == 5 {
			ticker.Stop()
			break
		}
	}
}

以上就是go语言定时器的功能使用示例详解的详细内容!

Golang 相关文章推荐
golang interface判断为空nil的实现代码
Apr 24 Golang
golang import自定义包方式
Apr 29 Golang
对Golang中的FORM相关字段理解
May 02 Golang
Golang 编译成DLL文件的操作
May 06 Golang
Go timer如何调度
Jun 09 Golang
Golang的继承模拟实例
Jun 30 Golang
详解Go语言Slice作为函数参数的使用
Jul 02 Golang
golang生成并解析JSON
Apr 14 Golang
Golang 对es的操作实例
Apr 20 Golang
GO中sync包自由控制并发示例详解
Aug 05 Golang
Python测试框架pytest核心库pluggy详解
Aug 05 Golang
Go中使用gjson来操作JSON数据的实现
Aug 14 Golang
golang用type-switch判断interface的实际存储类型
Apr 14 #Golang
golang语言指针操作
Apr 14 #Golang
golang使用map实现去除重复数组
Apr 14 #Golang
golang生成并解析JSON
Apr 14 #Golang
Go语言 详解net的tcp服务
Apr 14 #Golang
golang连接MySQl使用sqlx库
Apr 14 #Golang
Go语言安装并操作redis的go-redis库
Apr 14 #Golang
You might like
一台收音机,让一家人都笑逐颜开!
2020/08/21 无线电
深入解析WordPress中加载模板的get_template_part函数
2016/01/11 PHP
php微信公众号开发(3)php实现简单微信文本通讯
2016/12/15 PHP
解决php-fpm.service not found问题的办法
2017/06/06 PHP
PHP Swoole异步MySQL客户端实现方法示例
2019/10/24 PHP
PHP如何通过带尾指针的链表实现'队列'
2020/10/22 PHP
js通过地址栏给action传值(中文乱码全是问号)
2013/05/02 Javascript
写JQuery插件的基本知识
2013/11/25 Javascript
pace.js页面加载进度条插件
2015/09/29 Javascript
极易被忽视的javascript面试题七问七答
2016/02/15 Javascript
EasyUi combotree 实现动态加载树节点
2016/04/01 Javascript
Bootstrap4一次重大更新 几乎涉及每行代码
2016/05/16 Javascript
基于iScroll实现下拉刷新和上滑加载效果
2017/07/18 Javascript
express如何使用session与cookie的方法
2018/01/30 Javascript
Vue从TodoList中学父子组件通信
2019/02/05 Javascript
vue动态注册组件实例代码详解
2019/05/30 Javascript
利用Angular7开发一个Radio组件的全过程
2019/07/11 Javascript
纯JS开发baguetteBox.js响应式画廊插件
2020/06/28 Javascript
Vue+penlayers实现多边形绘制及展示
2020/12/24 Vue.js
python使用7z解压软件备份文件脚本分享
2014/02/21 Python
Python中的defaultdict与__missing__()使用介绍
2018/02/03 Python
用Django写天气预报查询网站
2018/10/21 Python
django 中QuerySet特性功能详解
2019/07/25 Python
python检测服务器端口代码实例
2019/08/31 Python
Python基于Socket实现简单聊天室
2020/02/17 Python
Python插件机制实现详解
2020/05/04 Python
Python装饰器结合递归原理解析
2020/07/02 Python
Python基于template实现字符串替换
2020/11/27 Python
MoviePy常用剪辑类及Python视频剪辑自动化
2020/12/18 Python
人力资源管理毕业生自荐信
2013/11/21 职场文书
我的网上商城创业计划书
2013/12/26 职场文书
研究生毕业论文导师评语
2014/12/31 职场文书
2015年党员干部承诺书
2015/01/21 职场文书
信贷客户经理岗位职责
2015/04/09 职场文书
公司员工奖惩制度
2015/08/04 职场文书
2016年校园社会综合治理宣传月活动总结
2016/03/16 职场文书