Go执行当前package下的所有方法

devtools/2025/3/15 7:11:03/

需求:需要一个文件一个定时任务方法,当项目初始化完毕后,自动加载并执行这些定时任务方法

项目目录架构

main.go 初始化

package mainimport ("sql_demo/schedule"
)func main() {/***** 其他初始化完毕后的操作**/// 定时任务schedule.Init()select {}}

schedule目录下

Init.go

package scheduleimport ("reflect""github.com/robfig/cron/v3"
)var Job *cron.Crontype ScheduleStruct struct{}func Init() {// cron.WithParser 必须有,否则 spec 时间不支持秒级Job = cron.New(cron.WithParser(cron.NewParser(cron.SecondOptional | cron.Minute | cron.Hour | cron.Dom | cron.Month | cron.Dow)))// 执行本pakage下的所有方法t := reflect.TypeOf(&ScheduleStruct{})// 遍历结构体的所有方法for i := 0; i < t.NumMethod(); i++ {method := t.Method(i)// 只执行公共方法if method.PkgPath == "" {// fmt.Printf("Executing method: %s\n", method.Name)// 获取方法的函数值methodValue := reflect.ValueOf(&ScheduleStruct{}).MethodByName(method.Name)// 调用方法methodValue.Call(nil)}}Job.Start()
}// 新增一个定时任务,可以指定是否禁用该任务。
// 参数:
// spec: 定时任务的时间规则字符串
// cmd: 定时任务要执行的函数
// disabled: 是否禁用该任务(当前未使用该参数)
func AddFunc(spec string, cmd func(), disabled bool) {if disabled {return}Job.AddFunc(spec, cmd)
}

everyMinutes.go

package schedulefunc (s *ScheduleStruct) EveryMinutes() {AddFunc("*/1 * * * * *", func() {println("hello world")}, true)}

原理:利用反射原理和结构体方法来实现。


http://www.ppmy.cn/devtools/167231.html

相关文章

css的显示模式

CSS的显示模式&#xff1a; html中一共有三种显示模式 1. 块级元素&#xff1a;独占一行&#xff0c;默认宽度为父元素的100%,可以设置宽高 例如div,p,ul,ol,li,h1-h6 2、行内元素&#xff1a;不独占一行&#xff0c;默认宽度为内容的宽度&#xff0c;不能设置宽高 例如span,a…

C语言基础笔记整理(附代码示例)

&#x1f4d8;C语言基础笔记整理&#xff08;附代码示例&#xff09; &#x1f4da; 目录 数据类型转换控制流结构 选择结构 if系列结构switch结构条件运算符 循环结构 while循环do-while循环for循环 循环控制语句 break与continue 循环嵌套案例 1️⃣ 数据类型转换 &#…

掌握市场先机:9款销售渠道管理工具深度测评

本文主要介绍了以下9款销售渠道管理工具&#xff1a;1.纷享销客&#xff1b; 2.销帮帮&#xff1b; 3.小满CRM&#xff1b; 4.有赞&#xff1b; 5.Oracle NetSuite&#xff1b; 6.Salesforce Sales Cloud&#xff1b; 7.Cin7&#xff1b; 8.Pipedrive&#xff1b; 9.BigCommerc…

SWPU 2022 新生赛

webdog1__start if (isset($_GET[web])) {$first$_GET[web];if ($firstmd5($first)) md5 自等 web0e215962017 &#xff08;md5后也是 0e) 登入后得到提示&#xff0c;robots.txt 访问 f14g.php 返回包里发现 hint > if (isset($_GET[get])){$get$_GET[get];if(!strs…

Redis 部署方式有哪些

以下是 Redis 主从复制和分布式部署的详细方法和步骤&#xff1a; 1.Redis 主从复制部署 架构 主从复制是 Redis 最基本的分布式机制&#xff0c;通过将数据从主节点&#xff08;Master&#xff09;复制到多个从节点&#xff08;Slave&#xff09;&#xff0c;实现读写分离和数…

江科大51单片机笔记【15】直流电机驱动(PWM)

写在前言 此为博主自学江科大51单片机&#xff08;B站&#xff09;的笔记&#xff0c;方便后续重温知识 在后面的章节中&#xff0c;为了防止篇幅过长和易于查找&#xff0c;我把一个小节分成两部分来发&#xff0c;上章节主要是关于本节课的硬件介绍、电路图、原理图等理论…

【实战篇】执行计划解析

执行计划解析 获取执行计划 数据库优化器可能会根据连接方式、连接条件等因素选择不同的执行计划。你可以通过 EXPLAIN 关键字查看两个查询的执行计划&#xff0c;以便更好地理解优化器的选择。 EXPLAIN SELECT ... -- 替换 ... 部分为你的查询内容观察执行计划并查看其中的…

MySQL与Redis的缓存一致性问题

MySQL与Redis的缓存一致性问题 前言 在学习中&#xff0c;为了提高数据的读取效率&#xff0c;我们往往会使用Redis来作为MySQL数据的缓存&#xff0c;那么&#xff0c;自然就产生了二者间数据的一致性问题。 想要对MySQL和Redis进行数据处理&#xff0c;自然会产生以下问题…