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 http使用踩过的坑与填坑指南
Apr 27 Golang
使用Golang的channel交叉打印两个数组的操作
Apr 29 Golang
解决Go gorm踩过的坑
Apr 30 Golang
golang slice元素去重操作
Apr 30 Golang
golang 实现Location跳转方式
May 02 Golang
go语言基础 seek光标位置os包的使用
May 09 Golang
入门学习Go的基本语法
Jul 07 Golang
手把手教你导入Go语言第三方库
Aug 04 Golang
Go归并排序算法的实现方法
Apr 06 Golang
Golang获取List列表元素的四种方式
Apr 20 Golang
Golang gRPC HTTP协议转换示例
Jun 16 Golang
go goth封装第三方认证库示例详解
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
克隆一个新项目的快捷方式
2013/04/10 PHP
在PHP上显示JFreechart画的统计图方法
2013/11/03 PHP
PHP Hash算法:Times33算法代码实例
2015/05/13 PHP
PHP进阶学习之依赖注入与Ioc容器详解
2019/06/19 PHP
PHP单文件上传原理及上传函数的封装操作示例
2019/09/02 PHP
PHP常量及变量区别原理详解
2020/08/14 PHP
javascript 浏览器判断 绑定事件 arguments 转换数组 数组遍历
2009/07/06 Javascript
基于jquery的高性能td和input切换并可修改内容实现代码
2011/01/09 Javascript
Js控制滑轮左右滑动实例
2015/02/13 Javascript
Jquery代码实现图片轮播效果(一)
2015/08/12 Javascript
RGB和YUV 多媒体编程基础详细介绍
2016/11/04 Javascript
Node.js用readline模块实现输入输出
2016/12/16 Javascript
jquery广告无缝轮播实例
2017/01/05 Javascript
BootStrap select2 动态改变值的方法
2017/02/10 Javascript
浅谈原生JS中的延迟脚本和异步脚本
2017/07/12 Javascript
AngularJS实现表单元素值绑定操作示例
2017/10/11 Javascript
p5.js入门教程之键盘交互
2018/03/19 Javascript
JavaScript实现页面中录音功能的方法
2019/06/04 Javascript
nodejs各种姿势断点调试的方法
2020/06/18 NodeJs
[05:08]顺网杯ISS-DOTA2赛歌 少女偶像Lunar青春演绎
2013/12/05 DOTA
python中reload(module)的用法示例详解
2017/09/15 Python
python人民币小写转大写辅助工具
2018/06/20 Python
Python+OpenCV感兴趣区域ROI提取方法
2019/01/10 Python
Python实现计算图像RGB均值方式
2020/06/04 Python
使用HTML5在网页中嵌入音频和视频播放的基本方法
2016/02/22 HTML / CSS
Holland & Barrett爱尔兰:英国领先的健康零售商
2019/03/31 全球购物
什么是Remote Module
2016/06/10 面试题
大学同学聚会邀请函
2014/01/19 职场文书
典型事迹材料范文
2014/12/29 职场文书
2016国庆节67周年红领巾广播稿
2015/12/18 职场文书
2016党员发展对象培训心得体会
2016/01/08 职场文书
求职信:会计求职的写作技巧
2019/04/24 职场文书
2019学子的答谢词范本!
2019/07/05 职场文书
导游词之珠海轮廓
2019/10/25 职场文书
python 使用tkinter与messagebox写界面和弹窗
2022/03/20 Python
pycharm无法安装cv2模块问题
2022/05/20 Python