ホームページ >バックエンド開発 >Golang >Go プラグインとそのアプリケーション間でカスタム データ型を共有するにはどうすればよいですか?

Go プラグインとそのアプリケーション間でカスタム データ型を共有するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-25 08:40:29934ブラウズ

How Can I Share Custom Data Types Between a Go Plugin and Its Application?

Go プラグインとアプリケーション間でカスタム データ型を共有する

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。