最小规则引擎,使用 yaml 作为输入,其目的是允许非程序员编辑和提供将生成特定输出的业务规则。
它使用 yaml 因为有固定的语法,人们可以在线参考(不是脚本语言)。它仍然有很多冗长的内容,以方便开发可以读取和编辑它们的 GUI/客户端。这样它们也很容易存储/转移。
检查example_test.go中的示例
简短描述
- 也可被视为 "条件输出 "引擎,因为规则接收输入(map[string]any),并在规则满足时生成输出。输出与输入不同。
- 规则被组合成一组,因此将输入传递给一组规则后,将返回输入所传递的所有规则的组合输出。
- 每条规则可以有多个条件。如果满足了这些条件,就会附加/写入规则的输出。
- 具有调试功能。除输出外,引擎还会返回一组给定输入中未通过的所有规则/条件。
它不是什么
- 输入与输出分离,只对输入进行评估。
- 规则之间不存在任何关系,不存在一个规则对另一个规则的引用,也不存在规则的层次结构。
- 除了从数值列表中进行 "SUM "计算外,它不进行任何计算。
案例:
conditions: |
conditions: 规则的条件。它们可以有 3 种类型:single单一、list 列表和aggregate聚合。
- single单一属性包含一系列单一条件。每个单一条件都有一个输入路径(用圆点分隔的字段),该路径指向引擎输入中的一个值。
- functions 属性包含对输入路径中指定的值进行评估的函数映射。在相同条件下可添加多个函数。所有函数的列表如下:rules/functions/single_input.go。您也可以创建自己的函数并将其添加到引擎中,方法是:rules.NewEngineCustom()
所有函数的参数都在方括号内指定。即使没有参数,方括号也应该存在。