Golang定时任务表达式合法性校验

[本文出自天外归云的博客园]

最近在使用golang的定时任务工具:https://github.com/jakecoffman/cron(这个仓库的优点是可以给定时任务起名字)

问题:对于用户输入的定时任务表达式,如何校验其合法性呢?

通过查看源码,我找到了验证的方法(通过Parse函数),需要自己捕获panic判断定时任务表达式是否合法。代码如下:

// ParseSpec 尝试转换定时任务表达式
func ParseSpec(spec string) (err error) {
	defer func() {
		if r := recover(); r != nil {
			log.Errorf("定时任务表达式(%+v)出错:%+v", spec, r)
			switch x := r.(type) {
			case string:
				err = errors.New(x)
			case error:
				err = x
			default:
				err = errors.New("发生未知panic")
			}
		}
	}()
	cron.Parse(spec)
	return
}

// IsValidSpec 校验spec表达式是否合法
func IsValidSpec(spec string) (valid bool, err error) {
	err = ParseSpec(spec)
	if err == nil {
		log.Infof("定时任务表达式(%+v)合法", spec)
		valid = true
	} else {
		log.Errorf("定时任务表达式(%+v)非法", spec)
		valid = false
	}
	return
}

相关资料:

1. 源码中对定时任务表达式的解析函数:https://github.com/jakecoffman/cron/blob/master/parser.go

2. Golang panic的捕获:https://blog.csdn.net/lanyang123456/article/details/79179097

 

posted @ 2021-02-10 09:58  天外归云  阅读(16)  评论(0编辑  收藏