web-dev-qa-db-fra.com

Charger le paquet dynamiquement dans Golang

Est-il possible de charger un package spécifique pendant l'exécution? Je veux avoir une sorte de plugins où chacun a les mêmes fonctions que les autres mais avec un comportement différent, et selon le fichier de configuration, chargez l'un ou l'autre . Merci 

25
Pepeluis

Vous pouvez envisager d’exécuter les packages 'plugin' au moment de l’exécution, en écrivant un nouveau programme (dans un répertoire temporaire, par exemple) et en exécutant via exec.Command , un résultat similaire à exec.Command("go", "run", files…).Run()

Vous verrez un code similaire ici .

11
Matt Sherman

Non, Go ne prend pas en charge les bibliothèques à chargement dynamique.

Votre meilleur pari est de démarrer le plugin en tant que son propre exécutable et de communiquer avec lui via des sockets ou via stdin/stdout.

Mise à jour 2017

Cette réponse n'est plus vraie, Go supporte maintenant plugins .

25
OneOfOne

Il existe un soutien pour cela dès le départ 1.8

https://golang.org/pkg/plugin/

11
thomasmeadows

Créez simplement un code qui lira la configuration, générera un fichier de base avec les paquets chargés dans l’ordre, puis exécutez-le, les langages de compilation ne fourniront pas de chargement dynamique, même Dart en souffre, il suffit de lire votre configuration. fichier puis créer un fichier temporaire avec les codes nécessaires pour charger et communiquer avec les sockets ou http 

0
Alex Ewetumo