基于golang的规则引擎
- Gengine是一款基于AST(Abstract Syntax Tree)和golang语言实现的规则引擎。能够让你在golang这种静态语言上,在不停服务的情况下实现动态加载与配置规则。
- 代码结构松散,逻辑极其简单,但经过了必要且详尽的测试
- Gengine所支持的规则,就是一门DSL(领域专用语言)
Gengine支持的规则语法
- 支持规则优先级和规则执行条件,优先级高的先执行,优先级低的后执行;
- 支持的优先级范围 -int64 ~ int64
- 支持中文规则名与中文规则描述
- 支持规则内定义变量,但规则内定义的变量在规则与规则之间的不可见
- 支持 if../if..else.. 代码块和其代码块嵌套
- 支持复杂逻辑运算
- 支持复杂数学四则运算(+ - * /)
- 支持结构体方法调用
- 支持单行注释(//)
- 支持优雅的规则检错机制(是的,你没看错,就是检错,不是检测!):如果待加载的一批规则中有一个规则有语法错误,那么规则引擎就不会加载这批规则去执行,防止对数据造成不可预知的危害
- 支持仅有一个返回值的函数赋值,且返回值为基础类型或结构体; 支持多返回值函数的调用,但无法处理其返回值
- 支持直接注入函数并执行,并允许函数重命名
- 支持规则链中有规则执行失败时,是否继续执行后续规则开关
- 支持一些内置函数
- 支持使用@name 在规则体内获得当前规则的名称
- 支持基础类型的map, slice, array
- 支持规则池,代码位置gengine/engine/gengine_pool.go, 测试用例 gengine/test/Pool_test.go
原理是基于 golang的 抽象语法树(AST) 实现
2020年7月24日 新鲜出炉,目前应该算是这块的中文第一项目了