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语言切片前或中间插入项与内置copy()函数详解
Apr 27 Golang
golang http使用踩过的坑与填坑指南
Apr 27 Golang
golang 接口嵌套实现复用的操作
Apr 29 Golang
go语言中GOPATH GOROOT的作用和设置方式
May 05 Golang
关于golang高并发的实现与注意事项说明
May 08 Golang
go语言使用Casbin实现角色的权限控制
Jun 26 Golang
试了下Golang实现try catch的方法
Jul 01 Golang
Go语言实现Base64、Base58编码与解码
Jul 26 Golang
Golang表示枚举类型的详细讲解
Sep 04 Golang
Golang 实现WebSockets
Apr 24 Golang
详解Go语言中配置文件使用与日志配置
Jun 01 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
php的字符串用法小结
2010/06/08 PHP
PHP开发者常犯的10个MySQL错误更正剖析
2012/01/30 PHP
PHP调用JAVA的WebService简单实例
2014/03/11 PHP
PHP生成树的方法
2015/07/28 PHP
php将数组存储为文本文件方法汇总
2015/10/28 PHP
Yii2中事务的使用实例代码详解
2016/09/07 PHP
ThinkPHP 模板引擎使用详解
2017/05/07 PHP
Laravel中七个非常有用但很少人知道的Carbon方法
2017/09/21 PHP
PHP实现使用DOM将XML数据存入数组的方法示例
2017/09/27 PHP
基于php流程控制语句和循环控制语句(讲解)
2017/10/23 PHP
PHP开发之用微信远程遥控服务器
2018/01/25 PHP
Laravel 5+ .env环境配置文件详解
2020/04/06 PHP
网页javascript精华代码集
2007/01/24 Javascript
JS 文件本身编码转换 图文教程
2009/10/12 Javascript
再分享70+免费的jquery 图片滑块效果插件和教程
2014/12/15 Javascript
JQuery中Ajax的操作完整例子
2017/03/07 Javascript
jquery.uploadView 实现图片预览上传功能
2017/08/10 jQuery
Vue 项目分环境打包的方法示例
2018/08/03 Javascript
小程序实现列表多个批量倒计时
2021/01/29 Javascript
使用element-ui +Vue 解决 table 里包含表单验证的问题
2020/07/17 Javascript
[02:34]肉山说——泡妞篇
2014/09/16 DOTA
解决tensorflow测试模型时NotFoundError错误的问题
2018/07/26 Python
Python Django框架实现应用添加logging日志操作示例
2019/05/17 Python
Python时间序列缺失值的处理方法(日期缺失填充)
2019/08/11 Python
基于python实现操作redis及消息队列
2020/08/27 Python
用CSS3的box-reflect设置文字倒影效果的方法讲解
2016/03/07 HTML / CSS
Debenhams百货英国官方网站:Debenhams UK
2016/07/12 全球购物
暇步士官网:Hush Puppies
2016/09/22 全球购物
静态变量和实例变量的区别
2015/07/07 面试题
大型公益活动策划方案
2014/08/20 职场文书
励志演讲稿200字
2014/08/21 职场文书
商超业务员岗位职责
2015/02/13 职场文书
办公室卫生管理制度
2015/08/04 职场文书
中职班主任培训心得体会
2016/01/07 职场文书
简短的人生哲理(38句)
2019/08/13 职场文书
在Java中Collection的一些常用方法总结
2021/06/13 Java/Android