写go语言定时任务的3个技巧

方法1 gocron

使用gocron库

go get -u github.com/go-co-op/gocron

用法举例:

timezone, _ := time.LoadLocation("Asia/Shanghai")
s := gocron.NewScheduler(timezone)
s.Every(5).Seconds().Do(func(){ ... }) 
s.Every("5m").Do(func(){ ... })
s.Every(5).Days().Do(fu
s.Every(1).Month(1, 2, 3).Do(func(){ ... })
s.Every(1).Day().At("10:30").Do(func(){ ... })
s.Every(1).Day().At("10:30;08:00").Do(func(){ ... })
s.Every(1).Day().At("10:30").At("08:00").Do(func(){ ... })
s.Every(1).MonthLastDay().Do(func(){ ... })
s.Every(2).MonthLastDay().Do(func(){ ... })
s.Cron("*/1 * * * *").Do(task) 
s.StartAsync()
s.StartBlocking()

使用如下:

	timezone, _ := time.LoadLocation("Asia/Shanghai")
	s := gocron.NewScheduler(timezone)

	// 每2秒执行一次
	s.Every(2).Seconds().Do(func() {
		go schedule1()
	})

	// 每4秒执行一次
	s.Every(4).Second().Do(func() {
		go schedule2()
	})

	s.StartBlocking()

方法2 time.Timer

新建一个time.Timer,在定时的时间到了之后t.C会有值传入,然后执行任务代码,重置定时器

	//设置定时任务的时间
	t := time.NewTimer(2 * time.Second)
	defer t.Stop()
	for {
		<-t.C
		fmt.Println("do something")
		t.Reset(2 * time.Second)
	}

方法3 time.Ticker

Ticker是一个周期性的定时器,下面代码会每隔2秒输出"do something"

	//设置定时任务的时间
	ticker := time.NewTicker(2 * time.Second)
	defer ticker.Stop()
	for range ticker.C {
		fmt.Println("do something")
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值