Heim >Backend-Entwicklung >Golang >Können Go-Binärdateien extern kompilierten Go-Code zur Laufzeit dynamisch laden und verknüpfen?
Problemstellung:
Ist dies bei einer kompilierten Go-Binärdatei möglich? um eine externe Go-Datei dynamisch zu kompilieren und sie sofort mit der vorhandenen Binärdatei zu verknüpfen Ausführung?
Lösung:
Die Möglichkeit, gemeinsam genutzte Bibliotheken zu erstellen, die dynamisches Laden und Verknüpfen ermöglichen, wurde im August 2015 in Go Version 1.5 eingeführt.
Schritte zum Erstellen und Verknüpfen Dynamisch:
Gemeinsame Bibliothek erstellen:
Kompilieren Sie die externe Go-Datei als gemeinsam genutzte Bibliothek mithilfe von -buildmode=shared flag:
go install -buildmode=shared my_library.go
Binärdatei mit dynamischer Verknüpfung erstellen:
Kompilieren Sie das Go Binärdatei, die die gemeinsam genutzte Bibliothek mithilfe von -linkshared lädt und verknüpft flag:
go build -linkshared main.go
Beispiel:
Betrachten Sie den folgenden Code in main.go:
package main import ( "fmt" "plugin" ) func main() { p, err := plugin.Open("my_library.so") if err != nil { fmt.Println(err) return } runFoo, err := p.Lookup("RunFoo") if err != nil { fmt.Println(err) return } runFoo.(func())() // Call the exported function from the shared library }
Hinweis: Die gemeinsam genutzte Bibliothek muss die Funktion RunFoo mit //export exportieren RunFoo im Go-Quellcode.
Das obige ist der detaillierte Inhalt vonKönnen Go-Binärdateien extern kompilierten Go-Code zur Laufzeit dynamisch laden und verknüpfen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!