Maison >développement back-end >Golang >Comment puis-je utiliser efficacement les interfaces personnalisées dans les plugins Go ?
Interfaces personnalisées dans les plugins Go
Question : Comment puis-je utiliser des interfaces personnalisées avec les plugins Go ?
Contexte : Les interfaces personnalisées sont essentielles pour la mise en œuvre de composants logiciels réutilisables et extensibles. Cependant, les premières tentatives pour les utiliser dans les plugins Go ont abouti à l'erreur suivante :
panic: interface conversion: plugin.Symbol is func() (filter.Filter, error), not func() (filter.Filter, error)
Réponse :
Bien que les plugins Go ne puissent pas accéder aux types définis dans le plugin lui-même , il est possible d'utiliser des interfaces personnalisées en suivant ces méthodes :
1. Utilisation d'un package commun :
Définissez l'interface dans un package qui est à la fois importé par le plugin et l'application principale. Cette approche permet aux deux composants d'utiliser la même définition de type.
2. Renvoi d'une interface{} à partir du plugin :
Demandez à la fonction du plugin de renvoyer une valeur de type interface{}. L'application principale peut alors définir une assertion de type sur la valeur renvoyée pour utiliser l'interface personnalisée.
Exemple :
Main Application :
package main import ( "fmt" "plugin" "github.com/fagongzi/gateway/pkg/filter" ) func main() { // ... GetInstance(func() (filter.Filter, error)) // Error occurs }
Plugin :
package plugin import "github.com/fagongzi/gateway/pkg/filter" type plgFilter struct{} func (plgFilter) Name() string { return "Bob" } func (plgFilter) Age() int { return 23 } // Return an "empty" filter to satisfy the function signature func GetInstance() (filter.Filter, error) { return nil, nil } func GetInstanceInter() (interface{}, error) { return &plgFilter{}, nil } func GetInstancePtr() (*plgFilter, error) { return &plgFilter{}, nil }
Comparaison :
Remarques supplémentaires :
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!