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秒后停止定时任务。

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