当前位置: 首页 > article >正文

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

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

项目目录架构

main.go 初始化

package main

import (
	"sql_demo/schedule"
)

func main() {
	 
	/***
	** 其他初始化完毕后的操作
	**/

	// 定时任务
	schedule.Init()

	select {}

}

schedule目录下

Init.go

package schedule

import (
	"reflect"

	"github.com/robfig/cron/v3"
)

var Job *cron.Cron

type 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 schedule

func (s *ScheduleStruct) EveryMinutes() {

	AddFunc("*/1 * * * * *", func() {
		println("hello world")
	}, true)

}

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


http://www.kler.cn/a/584880.html

相关文章:

  • 微信小程序校园跑腿的设计与实现【lw+源码+部署+视频+讲解】
  • SpringBoot使用Logback日志框架与综合实例
  • 在 WSL中批量执行InSAR任务-stackSentinel.py
  • 【web前端开发】HTML排版标签、HTML语义化标签、常用的文本标签
  • 嵌入式裸机设计--MCU常用裸机架构有哪些?
  • 面试之《实现Event Bus》
  • Qt 驾校考试系统项目实现
  • OSPF-2 邻接建立关系
  • 软件工程概述、软件过程模型、逆向工程(高软45)
  • 2025探索短剧行业新可能报告40+份汇总解读|附PDF下载
  • 【WPF】Slider滑动方法(INotifyPropertyChanged、ValueChanged )响应速度对比分析
  • java-正则表达式
  • 【从零开始学习计算机科学】数据库系统(四)数据库的物理设计
  • Golang |* 和
  • 车载以太网测试-9【网络层】-子网划分的子网掩码VLAN
  • SQLAlchemy系列教程:如何执行原生SQL
  • 【漫话机器学习系列】135.随机森林(Random For Forest)
  • 01 | Go 项目开发极速入门课介绍
  • 【Go语言圣经1.1】
  • Android 自定义蓝牙扫描动画:多波浪扩散效果