Maison >développement back-end >Golang >Comment puis-je lier dynamiquement du code Go externe à un binaire Go existant ?

Comment puis-je lier dynamiquement du code Go externe à un binaire Go existant ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-04 22:16:14787parcourir

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

Lien dynamique dans les binaires Go

Problème :

Considérez un scénario dans lequel vous avez un binaire Go existant et devez ajouter des fonctionnalités en compilant un fichier Go externe. Une fois compilé, vous souhaitez intégrer ce nouveau code dans le binaire sans reconstruire l'intégralité de l'application.

Solution :

Dans Go 1.5 et versions ultérieures, il est désormais possible de créer et lier des bibliothèques partagées de manière dynamique. Voici comment obtenir la fonctionnalité souhaitée :

  • Création de bibliothèques partagées :
$ go install -buildmode=shared std

Cette commande crée la bibliothèque standard en tant que bibliothèques partagées.

  • Compilation de Go externe Fichier :

Compilez le fichier Go externe comme suit :

$ go build -linkshared hello.go
  • Lien vers la bibliothèque partagée :

Une fois le fichier Go externe compilé, il peut être lié au binaire existant à l'aide du -linkshared flag :

$ go install -linkshared mybinary.go
  • Utilisation :

Dans le binaire existant, vous pouvez désormais appeler le code nouvellement compilé comme toute autre fonction définie dans le binaire lui-même.

Exemple :

package main

import (
    "fmt"
    "github.com/myimportpath/mypackage"
)

func main() {
    fmt.Println("Before calling compiled code")
    mypackage.RunFoo()
    fmt.Println("After calling compiled code")
}

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