É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 :
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
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!