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

目录
相关文章
|
5月前
|
存储 安全 Java
【Golang】(4)Go里面的指针如何?函数与方法怎么不一样?带你了解Go不同于其他高级语言的语法
结构体可以存储一组不同类型的数据,是一种符合类型。Go抛弃了类与继承,同时也抛弃了构造方法,刻意弱化了面向对象的功能,Go并非是一个传统OOP的语言,但是Go依旧有着OOP的影子,通过结构体和方法也可以模拟出一个类。
302 2
|
6月前
|
监控 前端开发 数据可视化
Github 12.3kstar, 3分钟起步做中后台?Go+Vue 脚手架,把权限、代码生成、RBAC 都封装好了
Go-admin 是基于 Gin + Vue 的中后台脚手架,集成 Casbin RBAC 权限、JWT 鉴权、GORM 数据库操作与 Swagger 文档,内置用户、角色、菜单等管理模块。提供代码生成器与表单构建器,支持多租户与多前端框架(Element UI/Arco/Ant Design),3 分钟快速搭建企业级后台,助力高效交付。
520 4
|
10月前
|
Go C++
Go语言方法与接收者 -《Go语言实战指南》
本文介绍了 Go 语言中方法的相关概念和用法。方法是绑定到特定类型上的函数,包含值接收者和指针接收者两种形式。值接收者不会改变原始数据,而指针接收者可修改原始数据,且在处理大型结构体时性能更优。文章详细对比了方法与普通函数的区别,并说明了选择指针接收者的原因,如修改原始值、提升性能及保持一致性。此外,Go 支持为任意自定义类型定义方法,不仅限于结构体。最后通过表格总结了方法的核心概念和使用场景。
269 34
|
SQL 关系型数据库 MySQL
Go语言项目高效对接SQL数据库:实践技巧与方法
在Go语言项目中,与SQL数据库进行对接是一项基础且重要的任务
327 11
|
大数据 Shell Go
GO方法与自定义类型
本文详细介绍了 Go 语言中的自定义数据类型与方法。不同于传统的面向对象编程语言,Go 通过结构体 (`struct`) 和方法 (`method`) 来扩展自定义类型的功能。文章解释了如何定义结构体、创建方法,并探讨了值接收器与指针接收器的区别及应用场景。此外,还介绍了方法的可见性以及接收器的命名惯例。通过具体示例,帮助读者更好地理解和应用这些概念。
193 2
|
存储 中间件 Go
在go语言服务中封装路由和示例
【6月更文挑战第23天】本文介绍golang后端按协议处理、中间件(一次性与每次请求执行)划分、以及服务架构Controller、Logic/Service、DAO/Repository和Routers划分。代码仓库在GitHub上提供。使用框架简化了交互和处理。后续章节深入探讨服务构建。
330 5
在go语言服务中封装路由和示例
|
存储 Ubuntu Go
在Ubuntu 16.04上安装Go 1.6的方法
在Ubuntu 16.04上安装Go 1.6的方法
263 1
|
存储 Ubuntu Go
在Ubuntu 18.04上安装Go的方法
在Ubuntu 18.04上安装Go的方法
363 1
|
存储 Ubuntu Linux
在Ubuntu 14.04上安装Go 1.6的方法
在Ubuntu 14.04上安装Go 1.6的方法
235 1
|
SQL 安全 测试技术
[go 面试] 接口测试的方法与技巧
[go 面试] 接口测试的方法与技巧