Rules:以YAML為輸入的最小Go規則引擎

banq發表於2024-03-11


最小規則引擎,使用 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()
    所有函式的引數都在方括號內指定。即使沒有引數,方括號也應該存在。

相關文章