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中切片copy复制和等号复制的区别介绍
Apr 27 Golang
golang在GRPC中设置client的超时时间
Apr 27 Golang
golang 接口嵌套实现复用的操作
Apr 29 Golang
解决golang结构体tag编译错误的问题
May 02 Golang
go xorm框架的使用
May 22 Golang
详解Go语言Slice作为函数参数的使用
Jul 02 Golang
Golang并发操作中常见的读写锁详析
Aug 30 Golang
golang操作redis的客户端包有多个比如redigo、go-redis
Apr 14 Golang
GO语言字符串处理函数之处理Strings包
Apr 14 Golang
实现GO语言对数组切片去重
Apr 20 Golang
Golang 结构体数据集合
Apr 22 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
linux系统上支持php的 iconv()函数的方法
2011/10/01 PHP
codeigniter教程之多文件上传使用示例
2014/02/11 PHP
php不使用插件导出excel的简单方法
2014/03/04 PHP
一个完整的php文件上传类实例讲解
2015/10/27 PHP
thinkPHP+phpexcel实现excel报表输出功能示例
2017/06/06 PHP
浅谈laravel框架与thinkPHP框架的区别
2019/10/23 PHP
Jquery 基础学习笔记之文档处理
2009/05/29 Javascript
TextArea不支持maxlength的解决办法(jquery)
2011/09/13 Javascript
jquery简单实现鼠标经过导航条改变背景图
2013/12/17 Javascript
javascript break指定标签打破多层循环示例
2014/01/20 Javascript
JS将制定内容复制到剪切板示例代码
2014/02/11 Javascript
jquery判断小数点两位和自动删除小数两位后的数字
2014/03/19 Javascript
ActiveX控件与Javascript之间的交互示例
2014/06/04 Javascript
jQuery中parents()和parent()的区别分析
2014/10/28 Javascript
jQuery多媒体插件jQuery Media Plugin使用详解
2014/12/19 Javascript
AngularJS应用开发思维之依赖注入3
2016/08/19 Javascript
AngularJS 异步解决实现方法
2017/06/12 Javascript
搭建vscode+vue环境的详细教程
2020/08/31 Javascript
Vue中使用Echarts仪表盘展示实时数据的实现
2020/11/01 Javascript
[06:23]2014DOTA2西雅图国际邀请赛 小组赛7月12日TOPPLAY
2014/07/12 DOTA
pyqt4教程之widget使用示例分享
2014/03/07 Python
python访问系统环境变量的方法
2015/04/29 Python
python 读取文件并替换字段的实例
2018/07/12 Python
Python中的CSV文件使用&quot;with&quot;语句的方式详解
2018/10/16 Python
python实现登录密码重置简易操作代码
2019/08/14 Python
python构造函数init实例方法解析
2020/01/19 Python
美国半成品食材配送服务商:Home Chef
2018/01/25 全球购物
Anthropologie英国:美国家喻户晓的休闲服装和家居产品品牌
2018/12/05 全球购物
洗车工岗位职责
2014/03/15 职场文书
品酒会策划方案
2014/05/26 职场文书
2014幼儿园班主任工作总结
2014/12/04 职场文书
会议欢迎词
2015/01/23 职场文书
教学督导岗位职责
2015/04/10 职场文书
应收账款管理制度
2015/08/06 职场文书
您对思维方式了解多少?
2019/12/09 职场文书
Windows下使用Nginx+Tomcat做负载均衡的完整步骤
2021/03/31 Servers