ホームページ  >  記事  >  バックエンド開発  >  Go - 構造体スライスへのポインタをインターフェイススライスに変換します

Go - 構造体スライスへのポインタをインターフェイススライスに変換します

WBOY
WBOY転載
2024-02-09 14:57:081110ブラウズ

Go - 将指向结构切片的指针转换为接口切片

php エディタ Baicao Go プログラミング言語では、構造体スライスへのポインタをインターフェイス スライスに変換する必要がある場合があります。この変換は、スライス内の要素を変更する必要がある場合など、特定の状況で非常に役立ちます。ポインタをインターフェイス スライスに変換することにより、データの一貫性や同期の問題を心配することなく、スライス内の要素に簡単にアクセスして変更することができます。この記事では、この変換の方法を説明し、実際の応用例をいくつか示します。

質問の内容

本番環境の GoLang コードを一部切り取って、次の例を作成しました。 リーリー

多くの構造体があり、それらはすべて同じインターフェイスを実装しています。

アイデアは、(JSON から) それらを逆シリアル化した後、読み込まれた各オブジェクトでメソッドを呼び出してオブジェクトの初期化を完了したいということです。一部の JSON ファイルにはトップレベルの配列があります。つまり、逆シリアル化されると、構造のリスト/スライスになります。

ただし、次のことを同時に実行できる宣言の組み合わせが見つかりません。

    実行
  • json.Unmarshal()
  • ロードされた各構造体を反復処理し、メソッドを呼び出します。
明らかに、これを 2 つの関数 (loadData とInitializeData) に分割して、これら 2 つの関数を実行できます。

これを単一のメソッドとして機能するように再構築する方法はありますか?

回避策

メソッドを、

Initializer インターフェイスを実装するメンバー構造体のスライスを受け入れるジェネリック メソッドとして宣言できます。

これを行うには、次のようにメソッドを宣言します。

リーリー

これには、構造体のポインタ レシーバ メソッドで使用するポインタとしてスライス値を宣言する必要があることに注意してください (例:

[]*AlphaStruct[]AlphaStruct ) : リーリー

出力:

リーリー

以上がGo - 構造体スライスへのポインタをインターフェイススライスに変換しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。