Maison > Article > développement back-end > Pourquoi le renvoi d'une interface en tant que symbole de plugin Go échoue-t-il et comment peut-il être corrigé ?
Liaison de plugins à des interfaces : une énigme
Dans Go, il est possible de créer des plugins qui implémentent des interfaces spécifiques. Cependant, il existe un comportement particulier lors du renvoi d'une interface sous forme de symbole de plugin. Examinons ce problème et explorons une solution.
L'interface et le plugin :
Nous définissons une interface IPlugin avec diverses méthodes et créons un plugin contenant une structure testpl qui le met en œuvre. Initialement, nous avons trois fonctions getPlugin différentes :
Le problème avec Lookup :
La solution réside dans la compréhension du fonctionnement de Plugin.Lookup(). Il renvoie un pointeur vers le symbole recherché. Dans le cas où le plugin expose une variable (comme Greeter), la valeur stockée dans sym est un pointeur vers la variable.
Le problème survient lorsque l'on essaie de lier le symbole du plugin à une interface. Une valeur de type pointeur vers une interface ne satisfait jamais aucune interface à l’exception de l’interface vide. Par conséquent, tenter d'affirmer le type iface.IPlugin à partir d'une valeur de type iface.IPlugin échouera toujours.
La solution :
Pour résoudre ce problème, nous devons soit :
pgPtr, ok := sym.(*iface.IPlugin) if !ok { panic(errors.New("error binding plugin to interface")) } pg := *pgPtr
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!