Dans les plugins Go, il est possible de partager des types de données personnalisés entre le plugin et l'application, mais pas via assertion de type direct.
Pour définir des types partagés, créez-les dans un package séparé et importez-le à la fois dans le plugin et dans l'application principale. Par exemple :
Package de type partagé :
<code class="go">package shared type Person struct { Name string }</code>
Code du plugin :
<code class="go">package main import ( "shared" ) var P = shared.Person{Name: "Emma"}</code>
Principal Code d'application :
<code class="go">package main import ( "fmt" "plugin" "shared" "os" ) func main() { plug, err := plugin.Open("./plugin.so") if err != nil { fmt.Println(err) os.Exit(1) } // Lookup shared type symbol sym, err := plug.Lookup("P") if err != nil { fmt.Println(err) os.Exit(1) } // Type-assert symbol into shared type var p shared.Person p, ok := sym.(shared.Person) if !ok { fmt.Println("Wrong symbol type") os.Exit(1) } // Use shared type as expected fmt.Println(p.Name) }</code>
Lors de la recherche de symboles de variable à partir d'un plugin, le résultat est un pointeur vers la variable, même s'il s'agit d'un type sans pointeur. Cela permet de modifier la valeur de la variable depuis le plugin.
En utilisant des types partagés définis dans un package séparé, il est possible de transmettre des types de données personnalisés entre un plugin Go et une application, permettant échange de données efficace et extension des capacités du plugin.
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!