Dans le développement d'un plugin Go, on peut chercher à s'interfacer avec un type de données personnalisé défini dans un plugin de l'application principale. Bien qu'il soit possible de récupérer des symboles exportés et de les représenter sous forme d'interfaces, la question se pose : pouvons-nous les saisir dans des structures personnalisées ?
La réponse directe est négative, car le package principal ne peut pas accéder aux identifiants définis dans d'autres packages. Par conséquent, l’identifiant exporté dans le plugin ne peut pas partager le même type avec l’application. Même avec des définitions de type Personne identiques dans le plugin et l'application, l'assertion de type échoue en raison de leur distinction inhérente.
Mais il existe une solution de contournement. La définition du type dans un package séparé permet son utilisation à la fois dans le plugin et dans l'application. Cela permet l'assertion de type de la structure personnalisée.
Voici un exemple :
Définition de type personnalisé :
<code class="go">package filter type Filter struct { Name string Age int }</code>
Code du plugin :
<code class="go">package main import ( "play/filter" ) var MyFilter = filter.Filter{ Name: "Bob", Age: 21, } func CreateFilter() filter.Filter { return filter.Filter{ Name: "Bob", Age: 21, } }</code>
Application principale :
<code class="go">package main import ( "fmt" "log" "os" "play/filter" "plugin" ) func main() { p, err := plugin.Open("plugin.so") if err != nil { log.Fatal(err) } mf, err := p.Lookup("MyFilter") if err != nil { log.Fatal(err) } f, ok := mf.(*filter.Filter) if !ok { log.Fatal("Wrong symbol type") } fmt.Printf("%+v\n", f) }</code>
L'exécution de cette fonctionnalité montre l'assertion de type et la récupération réussies des données :
&{Name:Bob Age:21}
Il est essentiel de noter la différence de type entre les identifiants exportés dans le plugin (type de variable pour MyFilter, type de fonction pour CreateFilter) et le type de symboles obtenus lors de la recherche depuis le plugin (type de pointeur pour les variables, même type pour les fonctions).
En utilisant cette approche, les développeurs peuvent partager des types de données personnalisés entre les plugins et les applications Go, facilitant ainsi une communication inter-composants efficace.
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!