Während sich unser Geschäft weiterentwickelt, werden unsere Anwendungen tendenziell größer und komplexer. Derzeit sind viele traditionelle Softwareentwicklungsmodelle möglicherweise nicht mehr ausreichend. Das herkömmliche Code-Kopplungsmodell kann unsere vielfältigen Entwicklungsanforderungen nur schwer erfüllen, während die Plug-in-Entwicklungsmethode ein flexibleres und skalierbareres Designkonzept bietet, mit dem eine Code-Entkopplung effektiv erreicht werden kann und der Betrieb von Anwendungen ohne Änderungen möglich ist. Neue Funktionen können jederzeit hinzugefügt werden Zeit unter Beibehaltung der ursprünglichen Codelogik.
Bei der Implementierung der Plug-In-Entwicklung ist Golang als effiziente, zuverlässige und hocheffiziente Programmiersprache natürlich eine sehr gute Wahl. Heute erfahren wir, wie man eine Plug-in-Anwendung in Golang implementiert.
Bevor wir mit dem eigentlichen Betrieb fortfahren, wollen wir kurz vorstellen, was Plug-in-Entwicklung ist. Die Plug-in-Entwicklung ist eine Entwicklungsmethode, die eine Anwendung in mehrere unabhängige Komponenten unterteilt. Jede Komponente kann unabhängig entwickelt, getestet, bereitgestellt und gewartet werden. Diese Komponenten können jederzeit hinzugefügt oder gelöscht werden, während die Anwendung ausgeführt wird. Dies hat folgende Vorteile:
Als nächstes werden wir die Go-Sprache verwenden, um eine Plug-in-Anwendung zu implementieren. Wir verwenden das Plug-in-Paket von Go, um ein Plug-in zu laden und auszuführen. Jedes Plug-in muss eine bestimmte Schnittstelle implementieren, um in der Anwendung aufgerufen zu werden. Hier entwickeln wir eine einfache Taschenrechneranwendung, hauptsächlich um zu demonstrieren, wie man mit Go die Plug-In-Entwicklung erreicht.
Die Rechneranwendung kann Addition, Subtraktion, Multiplikation, Division und andere Funktionen unterstützen, und jede Funktion entspricht einem Plug-In. Wir werden ein Hauptprogramm und vier Plug-Ins schreiben, um vier verschiedene Berechnungslogiken für Addition, Subtraktion, Multiplikation und Division zu implementieren.
Werfen wir zunächst einen Blick auf den Code des Hauptprogramms:
package main import ( "fmt" "os" "plugin" ) type Operation interface { Calculate(a, b int) int } type Plugin struct { Name string Operation Operation } func main() { if len(os.Args) < 3 { fmt.Println("Usage: pluginCalculator OPERATION VALUE") os.Exit(-1) } op := os.Args[1] value := os.Args[2] plugins := []Plugin{ Plugin{"Add", nil}, Plugin{"Subtract", nil}, Plugin{"Multiply", nil}, Plugin{"Divide", nil}, } for i, plugin := range plugins { p, err := pluginOpen("./plugins/" + plugin.Name + ".so") if err != nil { fmt.Println("Error opening plugin:", plugin.Name) continue } var op Operation op, err = p.Lookup("Operation") if err != nil { fmt.Println("Error looking up operation:", plugin.Name) continue } plugins[i].Operation = op } for _, plugin := range plugins { if plugin.Operation == nil { continue } if plugin.Name == op { valueInt := 0 fmt.Sscanf(value, "%d", &valueInt) result := plugin.Operation.Calculate(100, valueInt) fmt.Printf("Result of %s(%d, %d): %d ", op, 100, valueInt, result) return } } fmt.Println("Unsupported operation:", op) } func pluginOpen(path string) (*plugin.Plugin, error) { p, err := plugin.Open(path) return p, err }
In diesem Programm verwenden wir das Plugin-Paket von Go, um das Plugin zu laden und seine Operationen auszuführen. Zuerst definieren wir eine Rechnerschnittstellenoperation. Jedes Plug-in muss diese Schnittstelle implementieren, um in der Anwendung aufgerufen zu werden. Anschließend haben wir eine Plugin-Struktur definiert, um die Informationen eines Plug-Ins darzustellen, einschließlich des Plug-In-Namens und der Operationsinstanz.
Als nächstes definieren wir ein Plugins-Array, um alle Plugin-Informationen zu speichern. Wir verwenden eine for-Schleife, um alle Plugins zu durchlaufen und Plugin-Dateien über die Funktion „plugin.Open“ zu laden. Wenn das Laden fehlschlägt, protokollieren Sie einen Fehler und fahren Sie mit dem Durchlaufen des nächsten Plugins fort. Wenn das Laden erfolgreich ist, verwenden Sie die p.Lookup-Funktion, um die im Plug-in implementierte Operationsschnittstelle zu finden und sie dem Plugins-Array zuzuweisen. Abschließend fragen wir den vom Benutzer eingegebenen Vorgang ab. Wenn das entsprechende Plug-In gefunden wird, verwenden wir die Berechnungsfunktion des Plug-Ins, um das Ergebnis zu berechnen und die Ergebnisinformationen auf der Konsole auszugeben.
Als nächstes werfen wir einen Blick auf die Code-Implementierung des Plug-Ins. Hier werden wir vier Plug-Ins schreiben, um vier verschiedene Berechnungslogiken für Addition, Subtraktion, Multiplikation und Division zu implementieren. Diese Plug-Ins implementieren alle die zuvor definierte Operationsschnittstelle.
Schauen wir uns zunächst den Code des Add-Plug-Ins an, das die Addition implementiert:
package main type Add struct{} func (*Add) Calculate(a, b int) int { return a + b } var Operation = Add{}
In diesem Programm definieren wir eine Add-Struktur, die die Add-Struktur implementiert Als Operationsschnittstelle haben wir die Calculate-Methode definiert, die die Additionsoperation implementiert und als Operationsvariable exportiert, um das Laden des Hauptprogramms zu erleichtern.
In ähnlicher Weise ist das Folgende die Code-Implementierung der vier Plug-Ins für Subtraktion, Multiplikation und Division:
Subtract Plug-In:
package main type Subtract struct{} func (*Subtract) Calculate(a, b int) int { return a - b } var Operation = Subtract{}
package main type Multiply struct{} func (*Multiply) Calculate(a, b int) int { return a * b } var Operation = Multiply{}
Plug-in teilen:
package main type Divide struct{} func (*Divide) Calculate(a, b int) int { return a / b } var Operation = Divide{}
Die Implementierung des Plug-ins ist sehr einfach und klar. Sie implementieren lediglich die Calculate-Methode in die Operationsschnittstelle, aber Sie müssen das Flag -buildmode=plugin verwenden, um eine .so-Datei zu generieren, zum Beispiel:
go build -buildmode=plugin Add.go
Zusammenfassung
Das obige ist der detaillierte Inhalt vonGolang implementiert Plug-In. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!