Go プラグインでは、プラグインとアプリケーション間でカスタム データ型を共有できますが、直接型アサーション。
共有型を定義するには、それらを個別のパッケージに作成し、プラグインとメイン アプリケーションの両方にインポートします。例:
共有タイプ パッケージ:
<code class="go">package shared type Person struct { Name string }</code>
プラグイン コード:
<code class="go">package main import ( "shared" ) var P = shared.Person{Name: "Emma"}</code>
メインアプリケーション コード:
<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>
プラグインから変数シンボルを検索すると、それが変数であっても、結果は変数へのポインターになります。非ポインタ型。これにより、プラグインから変数の値を変更できるようになります。
別のパッケージで定義された共有型を使用することで、Go プラグインとアプリケーションの間でカスタム データ型を渡すことができ、効率的なデータ交換とプラグインの機能の拡張。
以上がGo プラグインとそのアプリケーション間でカスタム データ型を共有するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。