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原生库的中bytes.Buffer用法
Apr 25 Golang
Go语言带缓冲的通道实现
Apr 26 Golang
golang 实现Location跳转方式
May 02 Golang
浅谈golang package中init方法的多处定义及运行顺序问题
May 06 Golang
Golang中异常处理机制详解
Jun 08 Golang
浅谈Go语言多态的实现与interface使用
Jun 16 Golang
Golang的继承模拟实例
Jun 30 Golang
Go语言基础知识点介绍
Jul 04 Golang
go goroutine 怎样进行错误处理
Jul 16 Golang
Go语言特点及基本数据类型使用详解
Mar 21 Golang
Golang使用Panic与Recover进行错误捕获
Mar 22 Golang
Go 中的空白标识符下划线
Mar 25 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
mysql 的 like 问题,超强毕杀记!!!
2007/01/18 PHP
用PHP连接MySQL代码的参数说明
2008/06/07 PHP
PHP 第二节 数据类型之数组
2012/04/28 PHP
PHP static局部静态变量和全局静态变量总结
2014/03/02 PHP
PHP GD库生成图像的几个函数总结
2014/11/19 PHP
php动态变量定义及使用
2015/06/10 PHP
php empty 函数判断结果为空但实际值却为非空的原因解析
2018/05/28 PHP
[全兼容哦]--实用、简洁、炫酷的页面转入效果loing
2007/05/07 Javascript
JQuery动画和停止动画实例代码
2013/03/01 Javascript
JavaScript实现url地址自动检测并添加URL链接示例代码
2013/11/12 Javascript
屏蔽IE弹出&quot;您查看的网页正在试图关闭窗口,是否关闭此窗口&quot;的方法
2013/12/31 Javascript
D3.js中data(), enter() 和 exit()的问题详解
2015/08/17 Javascript
JS组件Bootstrap ContextMenu右键菜单使用方法
2016/04/17 Javascript
vue 开发一个按钮组件的示例代码
2018/03/27 Javascript
使用Angular 6创建各种动画效果的方法
2018/10/10 Javascript
浅谈Javascript中的对象和继承
2019/04/19 Javascript
在vue中使用echars实现上浮与下钻效果
2019/11/08 Javascript
JS typeof fn === 'function' &amp;&amp; fn()详解
2020/08/22 Javascript
基于js实现的图片拖拽排序源码实例
2020/11/04 Javascript
mac系统安装Python3初体验
2018/01/02 Python
Python无损音乐搜索引擎实现代码
2018/02/02 Python
Python中GIL的使用详解
2018/10/03 Python
python中嵌套函数的实操步骤
2019/02/27 Python
Python爬虫爬取新闻资讯案例详解
2020/07/14 Python
Python eval函数介绍及用法
2020/11/09 Python
第二层交换机和路由器的区别?第三层交换机和路由器的区别?
2013/05/23 面试题
企业出纳岗位职责
2014/03/12 职场文书
农村党支部书记党群众路线四风问题整改措施
2014/09/26 职场文书
党建工作整改措施
2014/10/28 职场文书
公务员检讨书
2014/11/01 职场文书
单位婚育证明范本
2014/11/21 职场文书
2015年司法局工作总结
2015/05/22 职场文书
公司开业主持词
2015/07/02 职场文书
修辞手法有哪些?
2019/08/29 职场文书
浅谈自定义校验注解ConstraintValidator
2021/06/30 Java/Android
为什么MySQL选择Repeatable Read作为默认隔离级别
2021/07/26 MySQL