Rules:以YAML为输入的最小Go规则引擎


最小规则引擎,使用 yaml 作为输入,其目的是允许非程序员编辑和提供将生成特定输出的业务规则。

它使用 yaml 因为有固定的语法,人们可以在线参考(不是脚本语言)。它仍然有很多冗长的内容,以方便开发可以读取和编辑它们的 GUI/客户端。这样它们也很容易存储/转移。

检查example_test.go中的示例

简短描述

  • 也可被视为 "条件输出 "引擎,因为规则接收输入(map[string]any),并在规则满足时生成输出。输出与输入不同。
  • 规则被组合成一组,因此将输入传递给一组规则后,将返回输入所传递的所有规则的组合输出。
  • 每条规则可以有多个条件。如果满足了这些条件,就会附加/写入规则的输出。
  • 具有调试功能。除输出外,引擎还会返回一组给定输入中未通过的所有规则/条件。

它不是什么

  • 输入与输出分离,只对输入进行评估。
  • 规则之间不存在任何关系,不存在一个规则对另一个规则的引用,也不存在规则的层次结构。
  • 除了从数值列表中进行 "SUM "计算外,它不进行任何计算。

案例:

  conditions:
    single:
      - input: customer.name
        functions:
          Equal: [ John ]


conditions: 规则的条件。它们可以有 3 种类型:single单一、list 列表和aggregate聚合。

  • single单一属性包含一系列单一条件。每个单一条件都有一个输入路径(用圆点分隔的字段),该路径指向引擎输入中的一个值。
  • functions 属性包含对输入路径中指定的值进行评估的函数映射。在相同条件下可添加多个函数。所有函数的列表如下:rules/functions/single_input.go。您也可以创建自己的函数并将其添加到引擎中,方法是:rules.NewEngineCustom()
    所有函数的参数都在方括号内指定。即使没有参数,方括号也应该存在。