Heim >Backend-Entwicklung >Golang >Wie kann ich externen Go-Code dynamisch mit einer vorhandenen Go-Binärdatei verknüpfen?

Wie kann ich externen Go-Code dynamisch mit einer vorhandenen Go-Binärdatei verknüpfen?

Barbara Streisand
Barbara StreisandOriginal
2024-12-13 19:17:11298Durchsuche

How Can I Dynamically Link External Go Code to an Existing Go Binary?

Dynamisches Erstellen und Verknüpfen aus einer Go-Binärdatei

Stellen Sie sich eine Situation vor, in der Sie über eine vorhandene Go-Binärdatei verfügen und externen Code darin integrieren müssen dynamisch. Dies kann erreicht werden, indem die externe Go-Datei kompiliert und mit der vorhandenen Binärdatei verknüpft wird.

Externe Go-Datei kompilieren

Sobald Go 1.5 im August 2015 veröffentlicht wird, wird es unterstützt für gemeinsam genutzte Bibliotheken wird eingeführt. Mit dem Flag -buildmode=shared können Sie die externe Go-Datei als gemeinsam genutzte Bibliothek erstellen:

go install -buildmode=shared external.go

Kompilierten Code verknüpfen

Um die kompilierte gemeinsam genutzte Bibliothek zu verknüpfen Um die vorhandene Binärdatei zu verwenden, verwenden Sie während des Erstellungsprozesses das Flag -linkshared:

go build -linkshared main.go

Beispiel Verwendung

Im gegebenen Beispiel würde die Hauptbinärdatei den folgenden Code enthalten:

func main() {
    // Compile external package containing runFoo()
    pkg, err := build.Import("github.com/example/external", "", build.ImportModeShared)
    if err != nil {
        // Handle error
    }

    // Get runFoo function from compiled package
    runFoo := reflect.ValueOf(pkg.Func("runFoo"))

    // Call the compiled runFoo function
    runFoo.Call(nil)

    // Continue execution normally
}

Dieser Ansatz ermöglicht es Ihnen, neue Funktionen dynamisch in vorhandene Go-Binärdateien zu integrieren, ohne das Ganze neu zu erstellen Programm.

Das obige ist der detaillierte Inhalt vonWie kann ich externen Go-Code dynamisch mit einer vorhandenen Go-Binärdatei verknüpfen?. 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