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语言-为什么返回值为接口类型,却返回结构体
Apr 24 Golang
用golang如何替换某个文件中的字符串
Apr 25 Golang
Golang 实现超大文件读取的两种方法
Apr 27 Golang
go语言中json数据的读取和写出操作
Apr 28 Golang
Go语言中break label与goto label的区别
Apr 28 Golang
golang gopm get -g -v 无法获取第三方库的解决方案
May 05 Golang
GoLang中生成UUID唯一标识的实现
May 08 Golang
go xorm框架的使用
May 22 Golang
Go语言设计模式之结构型模式
Jun 22 Golang
基于Go语言构建RESTful API服务
Jul 25 Golang
GO中sync包自由控制并发示例详解
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
实用函数9
2007/11/08 PHP
用js进行url编码后用php反解以及用php实现js的escape功能函数总结
2010/02/08 PHP
php策略模式简单示例分析【区别于工厂模式】
2019/09/25 PHP
YII2框架中日志的配置与使用方法实例分析
2020/03/18 PHP
JavaScript去掉数组中的重复元素
2011/01/13 Javascript
ASP.NET jQuery 实例18 通过使用jQuery validation插件校验DropDownList
2012/02/03 Javascript
js遍历td tr等html元素
2012/12/13 Javascript
uploadify在Firefox下丢失session问题的解决方法
2013/08/07 Javascript
利用Keydown事件阻止用户输入实现代码
2014/03/11 Javascript
删除javascript中注释语句的正则表达式
2014/06/11 Javascript
谈谈JavaScript中function多重理解
2015/08/28 Javascript
vue.js+Element实现表格里的增删改查
2017/01/18 Javascript
vue富文本框(插入文本、图片、视频)的使用及问题小结
2018/08/17 Javascript
vue中,在本地缓存中读写数据的方法
2018/09/21 Javascript
仿ElementUI实现一个Form表单的实现代码
2019/04/23 Javascript
用webAPI实现图片放大镜效果
2020/11/23 Javascript
python爬虫_自动获取seebug的poc实例
2017/08/05 Python
BP神经网络原理及Python实现代码
2018/12/18 Python
Python列表切片操作实例总结
2019/02/19 Python
django ManyToManyField多对多关系的实例详解
2019/08/09 Python
windows下Python安装、使用教程和Notepad++的使用教程
2019/10/06 Python
Selenium使用Chrome模拟手机浏览器方法解析
2020/04/10 Python
openCV提取图像中的矩形区域
2020/07/21 Python
Pytest单元测试框架如何实现参数化
2020/09/05 Python
Anaconda+spyder+pycharm的pytorch配置详解(GPU)
2020/10/18 Python
请说出你所知道的线程同步的方法
2013/04/19 面试题
杭州信雅达系统.NET工程师面试试题
2015/02/08 面试题
学年自我鉴定
2014/01/16 职场文书
如何写好优秀的创业计划书
2014/01/30 职场文书
2014两会优秀的心得体会范文
2014/03/17 职场文书
科长竞聘演讲稿
2014/05/16 职场文书
经营管理策划方案
2014/05/22 职场文书
完整版商业计划书
2014/09/15 职场文书
党组织领导班子整改方案
2014/10/25 职场文书
幼儿园六一儿童节活动总结
2015/02/10 职场文书
利用正则表达式匹配浮点型数据
2022/05/30 Java/Android