Go 定时任务方法封装

简介: Go 定时任务方法封装

在Go语言中,可以使用 time 包和 goroutine 来封装定时任务。以下是一个示例代码:

package main
import (
  "fmt"
  "time"
)
func main() {
  // 创建一个定时任务
  task := NewTask(5*time.Second, func() {
    fmt.Println("定时任务执行")
  })
  // 启动定时任务
  task.Start()
  // 等待一段时间
  time.Sleep(10 * time.Second)
  // 停止定时任务
  task.Stop()
}
type Task struct {
  interval time.Duration
  fn       func()
  stopChan chan struct{}
}
func NewTask(interval time.Duration, fn func()) *Task {
  return &Task{
    interval: interval,
    fn:       fn,
    stopChan: make(chan struct{}),
  }
}
func (t *Task) Start() {
  go func() {
    ticker := time.NewTicker(t.interval)
    defer ticker.Stop()
    for {
      select {
      case <-ticker.C:
        t.fn()
      case <-t.stopChan:
        return
      }
    }
  }()
}
func (t *Task) Stop() {
  close(t.stopChan)
}

在上述示例中,我们定义了一个 Task 结构体来封装定时任务。 NewTask 函数用于创建一个新的定时任务对象,接受一个时间间隔和一个函数作为参数。 Start 方法用于启动定时任务,使用 goroutine 来定期执行传入的函数。 Stop 方法用于停止定时任务,通过关闭 stopChan 通道来通知定时任务停止执行。

main 函数中,我们创建一个定时任务对象,每隔5秒执行一次打印操作。然后启动定时任务,并等待10秒后停止定时任务。

目录
相关文章
|
2月前
|
SQL 关系型数据库 MySQL
Go语言项目高效对接SQL数据库:实践技巧与方法
在Go语言项目中,与SQL数据库进行对接是一项基础且重要的任务
88 11
|
3月前
|
大数据 Shell Go
GO方法与自定义类型
本文详细介绍了 Go 语言中的自定义数据类型与方法。不同于传统的面向对象编程语言,Go 通过结构体 (`struct`) 和方法 (`method`) 来扩展自定义类型的功能。文章解释了如何定义结构体、创建方法,并探讨了值接收器与指针接收器的区别及应用场景。此外,还介绍了方法的可见性以及接收器的命名惯例。通过具体示例,帮助读者更好地理解和应用这些概念。
|
4月前
|
存储 Ubuntu Go
在Ubuntu 16.04上安装Go 1.6的方法
在Ubuntu 16.04上安装Go 1.6的方法
53 1
|
4月前
|
存储 Ubuntu Go
在Ubuntu 18.04上安装Go的方法
在Ubuntu 18.04上安装Go的方法
67 1
|
4月前
|
存储 Ubuntu Linux
在Ubuntu 14.04上安装Go 1.6的方法
在Ubuntu 14.04上安装Go 1.6的方法
61 1
|
4月前
|
SQL 安全 测试技术
[go 面试] 接口测试的方法与技巧
[go 面试] 接口测试的方法与技巧
|
6月前
|
存储 中间件 Go
在go语言服务中封装路由和示例
【6月更文挑战第23天】本文介绍golang后端按协议处理、中间件(一次性与每次请求执行)划分、以及服务架构Controller、Logic/Service、DAO/Repository和Routers划分。代码仓库在GitHub上提供。使用框架简化了交互和处理。后续章节深入探讨服务构建。
170 5
在go语言服务中封装路由和示例
|
4月前
|
运维 监控 算法
[go 面试] 优化线上故障排查与性能问题的方法
[go 面试] 优化线上故障排查与性能问题的方法
|
4月前
|
JSON 测试技术 Go
Go Kit中读取原始HTTP请求体的方法
Go Kit中读取原始HTTP请求体的方法
|
4月前
|
编译器 Go
Go语言中的闭包:封装数据与功能的强大工具
Go语言中的闭包:封装数据与功能的强大工具