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
本文来自博客园,作者:天外归云,转载请注明原文链接:https://www.cnblogs.com/LanTianYou/p/14395041.html

浙公网安备 33010602011771号