Heim  >  Artikel  >  Backend-Entwicklung  >  Golang implementiert eine Regel-Engine

Golang implementiert eine Regel-Engine

WBOY
WBOYOriginal
2023-05-15 09:02:061264Durchsuche

Mit der kontinuierlichen Weiterentwicklung der Technologie der künstlichen Intelligenz werden verschiedene Regel-Engines in verschiedenen Bereichen wie Finanzen, medizinischer Versorgung, Industrie usw. immer häufiger eingesetzt. Die Regel-Engine kann Geschäftslogik und Regeln abstrahieren und eine automatisierte Ausführung von Regeln realisieren, wodurch Effizienz und Genauigkeit verbessert werden. In diesem Artikel wird erläutert, wie Sie mit Golang eine Regel-Engine implementieren.

1. Grundprinzipien der Regel-Engine

Bevor Sie das Implementierungsprinzip der Regel-Engine vorstellen, müssen Sie zunächst die Grundkonzepte und Komponenten der Regel-Engine verstehen.

Die Regel-Engine besteht aus drei Teilen: Bedingungen, Aktionen und Ereignissen. Bedingungen beziehen sich auf die Voraussetzungen für die Regelerkennung, Aktionen beziehen sich auf Aktionen, die ausgeführt werden müssen, nachdem die Regeln ausgeführt wurden, und Ereignisse beziehen sich auf die Regel-Engine, die die Ausführung auslöst, wenn ein bestimmtes Ereignis eintritt.

Im Einzelnen enthält die Regel-Engine die folgenden Komponenten:

  1. Regelvorlage: Die Regelvorlage wird verwendet, um die Struktur und Komponenten der Regel zu beschreiben. Sie enthält Elemente wie Bedingungen, Aktionen und Ereignisse.
  2. Regel-Engine: Die Regel-Engine ist ein Softwaresystem, das zum Analysieren von Regelvorlagen und zum Ausführen von Aufgaben wie Regelerkennung und Aktionsausführung verwendet wird.
  3. Regelbasis: Die Regelbasis ist ein wichtiger Teil der Regel-Engine. Sie enthält alle Regelsätze und kann nach verschiedenen Typen klassifiziert werden.

2. Grundlegende Schritte zum Implementieren der Regel-Engine in Golang

  1. Regelvorlage definieren

In Golang können Sie die Strukturstruktur verwenden, um eine Regelvorlage zu definieren. Konkret enthält die Regelvorlage drei Teile: Bedingungen, Aktionen und Ereignisse.

Die Typdefinition lautet wie folgt:

//条件
type Condition struct {
    Field string
    Operator string
    Value interface{}
}
//动作
type Action struct {
    Field string
    Operator string
    Value interface{}
}
//事件
type Event struct {
    Name string
    Conditions []Condition
    Actions []Action
}
  1. Parsing-Regelvorlage

Der Zweck der Parsing-Regelvorlage besteht darin, die Regelvorlage in eine Datenstruktur umzuwandeln, die der Computer ausführen kann, z. B. Karte, Slice usw. Insbesondere können Sie die Funktion json.Unmarshal() in Golang verwenden, um die Regelvorlage im JSON-Format in eine Regelvorlagenstruktur zu analysieren.

Der Beispielcode lautet wie folgt:

type Rule struct {
    Events []Event `json:"events"`
}

func ParseRule(ruleJson string) (Rule, error) {
    var rule Rule
    err := json.Unmarshal([]byte(ruleJson), &rule)
    if err != nil {
        return Rule{}, err
    }
    return rule, nil
}
  1. Einrichten einer Regelbasis

Der Zweck des Einrichtens einer Regelbasis besteht darin, alle Regeln zu speichern und sie nach Kategorie zu verwalten. Die Regelbasis kann mithilfe von Map in Golang implementiert werden, wobei „key“ der Regeltyp und „value“ der Regelsatz ist.

Der Beispielcode lautet wie folgt:

type RuleSet map[string][]Rule

func (ruleSet RuleSet) AddRule(rule Rule, ruleType string) {
    if _, ok := ruleSet[ruleType]; !ok {
        ruleSet[ruleType] = make([]Rule, 0)
    }
    ruleSet[ruleType] = append(ruleSet[ruleType], rule)
}
  1. Regelerkennung implementieren

Der Zweck der Regelerkennung besteht darin, festzustellen, ob eine Eingabe die Bedingungen der Regel erfüllt. In Golang können Sie die Funktion ValueOf() im Reflect-Paket verwenden, um den Typ und den Wert der Eingabedaten abzurufen und dann eine bedingte Beurteilung durchzuführen.

Der Beispielcode lautet wie folgt:

func Check(event Event, data interface{}) bool {
    v := reflect.ValueOf(data)
    for _, condition := range event.Conditions {
        fieldValue := v.FieldByName(condition.Field).Interface()
        conditionValue := condition.Value
        operator := condition.Operator
        switch operator {
        case "==":
            if fieldValue != conditionValue {
                return false
            }
        case ">":
            if fieldValue.(float64) <= conditionValue.(float64) {
                return false
            }
        case "<":
            if fieldValue.(float64) >= conditionValue.(float64) {
                return false
            }
        //其它操作符实现相应逻辑
        }
    }
    return true
}
  1. Aktionsausführung implementieren

Der Zweck der Aktionsausführungsimplementierung besteht darin, Aktionen gemäß Regeln auszuführen, z. B. das Senden von E-Mails, Textnachrichten, das Ändern von Datenbanken usw. In Golang können Sie das Datenbank-/SQL-Paket zum Betreiben der Datenbank und das Net/SMTP-Paket zum Versenden von E-Mails verwenden.

Der Beispielcode lautet wie folgt:

func ExecuteAction(action Action, data interface{}) {
    v := reflect.ValueOf(data)
    fieldValue := v.FieldByName(action.Field)
    switch action.Operator {
    case "=":
        fieldValue.Set(reflect.ValueOf(action.Value))
    //其它操作符实现相应逻辑
    }
}

func ExecuteActions(actions []Action, data interface{}) {
    for _, action := range actions {
        ExecuteAction(action, data)
    }
}
  1. Vervollständigen Sie die Regel-Engine

Der Zweck der fertigen Regel-Engine besteht darin, alle Komponenten zu integrieren, um eine automatisierte Regelerkennung und Aktionsausführung zu erreichen. In Golang können Sie eine RuleEngine-Struktur definieren, die die Regelbasis, Eingabedaten und Regelausführungsfunktionen enthält.

Der Beispielcode lautet wie folgt:

type RuleEngine struct {
    RuleSet RuleSet
    Data interface{}
}

func NewRuleEngine(ruleSet RuleSet, data interface{}) RuleEngine {
    return RuleEngine{ruleSet, data}
}

func (engine RuleEngine) Run() {
    for ruleType, rules := range engine.RuleSet {
        for _, rule := range rules {
            for _, event := range rule.Events {
                if event.Name != "input" {
                    continue
                }
                if !Check(event, engine.Data) {
                    continue
                }
                ExecuteActions(event.Actions, engine.Data)
            }
        }
    }
}

3. Zusammenfassung

In diesem Artikel wird erläutert, wie Sie mit Golang eine Regel-Engine implementieren, einschließlich Regelvorlagendefinition, Regelbibliothekseinrichtung, Regelerkennung und Aktionsausführung usw. Regel-Engines verfügen über ein breites Anwendungsspektrum, das die Geschäftseffizienz und -genauigkeit verbessern und auch die Entwicklung der Technologie der künstlichen Intelligenz stark unterstützen kann.

Das obige ist der detaillierte Inhalt vonGolang implementiert eine Regel-Engine. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:golang int schwebenNächster Artikel:golang int schweben