wake-up-neo.net

Paket dynamisch in Golang laden

Kann ein bestimmtes Paket zur Laufzeit geladen werden? Ich möchte eine Art Plugins haben, bei dem jedes die gleichen Funktionen hat wie die anderen, jedoch mit unterschiedlichem Verhalten und je nach Konfigurationsdatei das eine oder andere .. 

25
Pepeluis

Sie können die Ausführung der Plugin-Pakete zur Laufzeit in Betracht ziehen, indem Sie ein neues Programm (z. B. in ein temporäres Verzeichnis) ausschreiben und es mit exec.Command ausführen. Etwas im Sinne von exec.Command("go", "run", files…).Run()

Sie sehen einen ähnlichen Code hier .

11
Matt Sherman

Nein, Go unterstützt keine dynamisch geladenen Bibliotheken.

Am besten starten Sie das Plugin als eigene ausführbare Datei und kommunizieren mit ihm über Sockets oder über stdin/stdout.

2017 update

Diese Antwort ist nicht mehr wahr, Go unterstützt jetzt plugins .

25
OneOfOne

Unterstützung gibt es jetzt schon ab go 1.8

https://golang.org/pkg/plugin/

11
thomasmeadows

Erstellen Sie einfach einen Codegen, der die Konfiguration liest, eine grundlegende go-Datei mit den geladenen Paketen generiert, und führen Sie dann den Befehl aus. Kompiliersprachen bieten auch kein dynamisches Laden. Selbst Dart leidet auf eine Art und Weise Erstellen Sie dann eine temporäre Datei mit den erforderlichen Codes, um Sockets oder http zu laden und mit ihnen zu kommunizieren 

0
Alex Ewetumo