基于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日 新鲜出炉,目前应该算是这块的中文第一项目了