


**Können Sie benutzerdefinierte Datentypen zwischen Go-Plugins und der Host-Anwendung teilen?**
Oct 26, 2024 am 10:16 AMBenutzerdefinierte Datentypfreigabe in Go-Plugins
In Go-Plugins ist es möglich, Go-Symbole zu exportieren und über die Host-Anwendung darauf zuzugreifen. Es stellt sich jedoch die Frage, ob benutzerdefinierte Datentypen zwischen dem Plugin und der Anwendung gemeinsam genutzt werden können, insbesondere als Strukturen.
Einschränkungen bei Typzusicherungen
Auf den ersten Blick die Verwendung von Typ Die Behauptung, ein exportiertes Symbol in eine bestimmte Struktur umzuwandeln, scheint einfach zu sein. Zum Beispiel:
import ( "plugin" ) // defined in plugin.so type Person struct { Name string } func main() { // ... Establish connection to plugin ... sym, _ := plug.Lookup("P") var p Person p, ok := sym.(Person) // assertion attempt // ... }
Leider schlägt dieser Versuch zur Laufzeit mit der Fehlermeldung „Falscher Symboltyp“ fehl. Diese Fehlermeldung ist auf die Tatsache zurückzuführen, dass im Hauptpaket definierte Bezeichner nicht von anderen Paketen aus referenziert werden können. Daher kann ein exportierter Bezeichner aus einem Plugin nicht vom gleichen Typ sein wie sein Gegenstück in der Hauptanwendung. Selbst wenn die Typdefinitionen identisch wären, würde die Typzusicherung aufgrund der unterschiedlichen beteiligten Typobjekte fehlschlagen.
Separater Paketansatz
Um diese Einschränkung zu umgehen, können wir die definieren Erstellen Sie einen benutzerdefinierten Datentyp in einem separaten Paket und importieren Sie ihn sowohl in das Plugin als auch in die Hauptanwendung. Dadurch können beide Komponenten dieselbe Typdefinition verwenden.
Hier ein Beispiel:
separate_pkg/filter/filter.go:
package filter type Filter struct { Name string Age int }
plugin.go:
// import "separate_pkg/filter" var MyFilter = filter.Filter{ Name: "Bob", Age: 21, } // ...
main.go:
// import { "play/filter/filter", "plugin" } func main() { p, _ := plugin.Open("plugin.so") mf, _ := p.Lookup("MyFilter") f, ok := mf.(*filter.Filter) // type assertion now succeeds // ... }
Das obige ist der detaillierte Inhalt von**Können Sie benutzerdefinierte Datentypen zwischen Go-Plugins und der Host-Anwendung teilen?**. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heißer Artikel

Hot-Tools-Tags

Heißer Artikel

Heiße Artikel -Tags

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

GO Language Pack Import: Was ist der Unterschied zwischen Unterstrich und ohne Unterstrich?

Wie schreibe ich Scheinobjekte und Stubs zum Testen in Go?

Wie kann ich kurzfristige Informationsübertragung zwischen Seiten im BeEGO-Framework implementieren?

Wie kann ich Tracing -Tools verwenden, um den Ausführungsfluss meiner GO -Anwendungen zu verstehen?

Wie kann ich benutzerdefinierte Typ -Einschränkungen für Generika in Go definieren?

Wie konvertieren Sie die Liste der MySQL -Abfrageergebnisse in eine benutzerdefinierte Struktur -Slice in Go -Sprache?

Wie schreibe ich Dateien in Go Language bequem?

Wie kann ich Linter und statische Analyse -Tools verwenden, um die Qualität und Wartbarkeit meines GO -Codes zu verbessern?
