zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    TabControl
    Loading
    Dialog
    Combobox
    Markdown编辑器Editor.md使用方式
    XSS攻击
    跨域解决方案及实现
    angular4 自定义表单组件
    angular4 Form表单相关
    js 详解setTimeout定时器
  • 原文地址:https://www.cnblogs.com/LanTianYou/p/14395041.html
Copyright © 2011-2022 走看看