## Go プラグインからカスタム データ型を入力アサートできますか?

Patricia Arquette
リリース: 2024-10-26 18:48:03
オリジナル
819 人が閲覧しました

## Can You Type Assert a Custom Data Type From a Go Plugin?

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

Go プラグイン開発では、Go プラグインで定義されたカスタム データ型とのインターフェイスを求めることができます。メインアプリケーションからプラグインを追加します。エクスポートされたシンボルを取得してインターフェイスとして表すことは可能ですが、カスタム構造体にアサートを入力できるでしょうか?

メイン パッケージは他のパッケージで定義された識別子にアクセスできないため、直接の答えは否定です。したがって、プラグインでエクスポートされた識別子は、アプリケーションと同じタイプを共有できません。プラグインとアプリケーションの両方で同一の Person 型定義があっても、それらの固有の区別により型アサーションは失敗します。

しかし、回避策はあります。別のパッケージでタイプを定義すると、プラグインとアプリケーションの両方で使用できるようになります。これにより、カスタム構造体の型アサーションが有効になります。

例は次のとおりです。

カスタム型定義:

<code class="go">package filter

type Filter struct {
    Name string
    Age  int
}</code>
ログイン後にコピー

プラグイン コード:

<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>
ログイン後にコピー

メイン アプリケーション:

<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>
ログイン後にコピー

これを実行すると、成功した型アサーションとデータの取得が表示されます:

&{Name:Bob Age:21}
ログイン後にコピー

プラグインでエクスポートされた識別子の型 (MyFilter の場合は変数の型、CreateFilter の場合は関数の型) と、プラグインから検索されたときに取得されるシンボルの型 (変数の場合はポインター型、関数の場合は同じ型) の型の違いに注意することが重要です。

このアプローチを利用することで、開発者は Go プラグインとアプリケーション間でカスタム データ型を共有し、コンポーネント間の効率的な通信を促進できます。

以上が## Go プラグインからカスタム データ型を入力アサートできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!