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语言操作数据库及其常规操作的示例代码
Apr 21 Golang
goland 恢复已更改文件的操作
Apr 28 Golang
golang 定时任务方面time.Sleep和time.Tick的优劣对比分析
May 05 Golang
go语言基础 seek光标位置os包的使用
May 09 Golang
Go timer如何调度
Jun 09 Golang
Go语言空白表示符_的实例用法
Jul 04 Golang
go使用Gin框架利用阿里云实现短信验证码功能
Aug 04 Golang
Go语言的协程上下文的几个方法和用法
Apr 11 Golang
golang生成并解析JSON
Apr 14 Golang
golang用type-switch判断interface的实际存储类型
Apr 14 Golang
Go web入门Go pongo2模板引擎
May 20 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实现小型站点广告管理(修正版)
2006/10/09 PHP
PHP 基于文件头的文件类型验证类函数
2012/05/01 PHP
编写php应用程序实现摘要式身份验证的方法详解
2013/06/08 PHP
利用PHP生成静态html页面的原理
2016/09/30 PHP
Laravel 修改验证异常的响应格式实例代码详解
2020/05/25 PHP
Javascript之this关键字深入解析
2013/11/12 Javascript
js 判断浏览器使用的语言示例代码
2014/03/22 Javascript
通用javascript代码判断版本号是否在版本范围之间
2015/11/29 Javascript
JS判断图片是否加载完成方法汇总(最新版)
2016/05/13 Javascript
js省市县三级联动效果实例
2020/04/15 Javascript
jQuery mobile在页面加载时添加加载中效果 document.ready 和window.onload执行顺序比较
2016/07/14 Javascript
详解js树形控件—zTree使用总结
2016/12/28 Javascript
jQuery仿IOS弹出框插件
2017/02/18 Javascript
jQuery EasyUI ProgressBar进度条组件
2017/02/28 Javascript
JS代码实现电脑配置检测功能
2018/03/21 Javascript
JS实现判断数组是否包含某个元素示例
2019/05/24 Javascript
vue element-ui实现动态面包屑导航
2019/12/23 Javascript
详解datagrid使用方法(重要)
2020/11/06 Javascript
[01:38:19]夜魇凡尔赛茶话会 第五期
2021/03/11 DOTA
python3连接mysql获取ansible动态inventory脚本
2020/01/19 Python
python的flask框架难学吗
2020/07/31 Python
基于CentOS搭建Python Django环境过程解析
2020/08/24 Python
Python基于Faker假数据构造库
2020/11/30 Python
anaconda升级sklearn版本的实现方法
2021/02/22 Python
HTML5中的nav标签学习笔记
2016/06/24 HTML / CSS
HTML5移动端开发遇见的东西
2019/10/11 HTML / CSS
澳大利亚儿童精品仓库:Goo & Co.
2019/06/20 全球购物
微软马来西亚官方网站:Microsoft马来西亚
2019/11/22 全球购物
explicit和implicit的含义
2012/11/15 面试题
JAVA高级程序员面试题
2013/09/06 面试题
学院书画协会部门岗位职责
2013/12/01 职场文书
城管综合整治方案
2014/05/01 职场文书
无刑事犯罪记录证明
2014/09/18 职场文书
转让协议书
2015/01/27 职场文书
使用CSS自定义属性实现骨架屏效果
2022/06/21 HTML / CSS
MySQL导致索引失效的几种情况
2022/06/25 MySQL