Maison >développement back-end >Golang >Les binaires Go peuvent-ils charger et lier dynamiquement du code Go compilé en externe au moment de l'exécution ?

Les binaires Go peuvent-ils charger et lier dynamiquement du code Go compilé en externe au moment de l'exécution ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-06 07:59:13832parcourir

Can Go binaries dynamically load and link externally compiled Go code at runtime?

Chargement dynamique et liaison à partir d'un binaire Go

Énoncé du problème :

Étant donné un binaire Go compilé, est-ce possible pour compiler dynamiquement un fichier Go externe et le lier au binaire existant pour une utilisation immédiate exécution ?

Solution :

La possibilité de créer des bibliothèques partagées, qui permettent un chargement et une liaison dynamiques, a été introduite dans la version 1.5 de Go en août 2015.

Étapes pour créer et créer un lien Dynamiquement :

  1. Créer une bibliothèque partagée :

    • Compilez le fichier Go externe en tant que bibliothèque partagée à l'aide du -buildmode=partagé flag :

      go install -buildmode=shared my_library.go
  2. Construire un binaire avec des liens dynamiques :

    • Compiler le Go binaire qui chargera et liera la bibliothèque partagée en utilisant le -linkshared flag :

      go build -linkshared main.go

Exemple :

Considérez le code suivant dans 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
}

Remarque : La bibliothèque partagée doit exporter la fonction RunFoo en utilisant //export RunFoo dans le code source Go.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn