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 相关文章推荐
Go Gin实现文件上传下载的示例代码
Apr 02 Golang
go:垃圾回收GC触发条件详解
Apr 24 Golang
golang http使用踩过的坑与填坑指南
Apr 27 Golang
golang goroutine顺序输出方式
Apr 29 Golang
解决Golang中goroutine执行速度的问题
May 02 Golang
go设置多个GOPATH的方式
May 05 Golang
go xorm框架的使用
May 22 Golang
手把手教你导入Go语言第三方库
Aug 04 Golang
golang连接MySQl使用sqlx库
Apr 14 Golang
Go语言 详解net的tcp服务
Apr 14 Golang
Golang 结构体数据集合
Apr 22 Golang
GO中sync包自由控制并发示例详解
Aug 05 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
香妃
2021/03/03 冲泡冲煮
网页游戏开发入门教程三(简单程序应用)
2009/11/02 PHP
php防止站外远程提交表单的方法
2014/10/20 PHP
thinkphp3.x中display方法及show方法的用法实例
2016/05/19 PHP
php表单习惯用的正则表达式
2017/10/11 PHP
ASP.NET jQuery 实例17 通过使用jQuery validation插件校验ListBox
2012/02/03 Javascript
js在输入框屏蔽按键,只能键入数字的示例代码
2014/01/03 Javascript
JavaScript访问CSS属性的几种方式介绍
2014/07/21 Javascript
jquery向上向下取整适合分页查询
2014/09/06 Javascript
javascript实现百度地图鼠标滑动事件显示、隐藏
2015/04/02 Javascript
JS获取屏幕高度的简单实现代码
2016/05/24 Javascript
基于vue v-for 循环复选框-默认勾选第一个的实现方法
2018/03/03 Javascript
JavaScript遍历查找数组中最大值与最小值的方法示例
2019/05/24 Javascript
nodemon实现Typescript项目热更新的示例代码
2019/11/19 Javascript
jQuery操作动画完整实例分析
2020/01/10 jQuery
实例讲解React 组件
2020/07/07 Javascript
微信小程序实现点赞业务
2021/02/10 Javascript
python psutil库安装教程
2018/03/19 Python
使用Python处理BAM的方法
2018/09/28 Python
Python 确定多项式拟合/回归的阶数实例
2018/12/29 Python
Python 如何提高元组的可读性
2019/08/26 Python
Django models文件模型变更错误解决
2020/05/11 Python
python中Array和DataFrame相互转换的实例讲解
2021/02/03 Python
阿波罗盒子:Apollo Box
2017/08/14 全球购物
什么是三层交换,说说和路由的区别在那里
2014/09/01 面试题
高中生学习总结的自我评价范文
2013/10/13 职场文书
初入社会应届生求职信
2013/11/18 职场文书
新员工欢迎词
2014/01/12 职场文书
车队司机个人自我鉴定
2014/04/17 职场文书
升职演讲稿范文
2014/05/23 职场文书
工作目标责任书
2014/07/23 职场文书
企业贷款委托书格式
2014/09/12 职场文书
2014年生产管理工作总结
2014/12/23 职场文书
2015感人爱情寄语
2015/02/26 职场文书
长征观后感
2015/06/09 职场文书
python 提取html文本的方法
2021/05/20 Python