Golang 定时任务的几种实现方法

摘要:在 Golang 开发中,定时任务是常见的需求。本文将介绍几种在 Golang 中实现定时任务的方法,包括 time 包的定时器、ticker,以及第三方库 cron,并通过示例代码展示它们的使用方式。
一、time 包的定时器(time.Timer 和 time.Ticker)
Golang 的标准库 time 提供了定时器 time.Timer 和 ticker time.Ticker,它们可以用来实现简单的定时任务。

  1. time.Timer
    time.Timer 是一个定时器,它会在指定的时长后触发一个事件。使用 time.NewTimer() 创建一个 Timer,然后使用 <-timer.C 等待定时器的通道触发。
    示例代码:
package main
import (
	"fmt"
	"time"
)
func main() {
   
	timer := time.NewTimer(2 * time.Second)
	<-timer.C
	fmt.Println("Timer expired")
}
  1. time.Ticker
    time.Ticker 是一个定时触发的计时器,它会以指定的时间间隔重复触发。使用 time.NewTicker() 创建一个 Ticker,然后使用 <-ticker.C 等待定时器的通道触发。
    示例代码:
package main
import (
	"fmt"
	"time"
)
func main() {
   
	ticker := time.NewTicker(1 * time.Second)
	for {
   
		select {
   
		case <-ticker.C:
			fmt.Println("Ticker ticked")
		}
	}
}

二、第三方库 cron
Golang 的第三方库 cron 提供了一个定时任务调度器,它基于 Unix cron 的语法,可以用来执行更复杂的定时任务。

  1. 安装 cron 包
    使用以下命令安装 cron 包:
go get github.com/robfig/cron
  1. 使用 cron 包
    示例代码:
package main
import (
	"fmt"
	"github.com/robfig/cron"
	"time"
)
func main() {
   
	c := cron.New()
	// 添加定时任务
	c.AddFunc("*/5 * * * * ?", func() {
   
		fmt.Println("Cron ticked", time.Now())
	})
	// 启动定时任务
	c.Start()
	// 阻塞主线程,否则主线程退出后定时任务也会停止
	select {
   }
}

在这个例子中,我们使用 */5 * * * * ? 表达式添加了一个每 5 秒执行一次的定时任务。
三、总结
在 Golang 中实现定时任务有多种方法,可以使用标准库 time 的定时器和 ticker,也可以使用第三方库 cron 来实现更复杂的定时任务。根据实际需求选择合适的方法,可以方便地在 Golang 中完成定时任务的开发。

相关推荐

  1. Golang 定时任务实现方法

    2024-01-25 04:32:02       54 阅读
  2. 【python并发任务方式

    2024-01-25 04:32:02       55 阅读
  3. 分布式锁实现方式

    2024-01-25 04:32:02       50 阅读
  4. 分布式 ID 实现方式

    2024-01-25 04:32:02       60 阅读
  5. 分布式锁实现方式

    2024-01-25 04:32:02       38 阅读
  6. Spring AOP实现方式

    2024-01-25 04:32:02       23 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-25 04:32:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-25 04:32:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-25 04:32:02       82 阅读
  4. Python语言-面向对象

    2024-01-25 04:32:02       91 阅读

热门阅读

  1. C# 实现 Vigenere 密码

    2024-01-25 04:32:02       46 阅读
  2. C++拾遗(四)引用与指针

    2024-01-25 04:32:02       45 阅读
  3. ROS学习笔记10——自定义源文件调用

    2024-01-25 04:32:02       54 阅读
  4. springboot集成mybatis处理json类型

    2024-01-25 04:32:02       59 阅读
  5. 汽车数据解决方案:通过更好的数据提高速度

    2024-01-25 04:32:02       56 阅读
  6. c语言之goto语句

    2024-01-25 04:32:02       57 阅读
  7. 数据结构:顺序表

    2024-01-25 04:32:02       54 阅读
  8. Numpy库:常用函数

    2024-01-25 04:32:02       51 阅读
  9. springboot项目之开启简单定时任务

    2024-01-25 04:32:02       47 阅读