ホームページ > バックエンド開発 > Golang > Go Struct 配列をインターフェイス配列に割り当てるにはどうすればよいですか?

Go Struct 配列をインターフェイス配列に割り当てるにはどうすればよいですか?

DDD
リリース: 2024-11-30 19:52:16
オリジナル
431 人が閲覧しました

How Can I Assign a Go Struct Array to an Interface Array?

Go におけるインターフェイス配列割り当ての難題

Go では、以下に示すように、構造体配列をインターフェイス配列に直接割り当てようとします。コンパイル時エラーが発生します:

x := []MyStruct{...}
var y []interface{}
y = x // Error: cannot use x as type []interface {}
ログイン後にコピー

このエラーは、その方法の根本的な違いに起因します。構造体の型とインターフェイスはメモリに保存されます。インターフェイスは、型情報とデータで構成される 2 つの単語のペアとして格納されますが、構造体の型はメモリ内の隣接するフィールドとして格納されます。

これらの表現は一致していないため、この 2 つの間の直接変換は実現できません。要素を宛先スライスに個別にコピーする必要があります。

この問題を解決するには、次のオプションのいずれかを検討してください:

  • インターフェイスのスライス: []interface{} スライスを使用します。各要素は構造体を表すインターフェイスです。 type:
var y []interface{}
y = make([]interface{}, len(x))
for i, v := range x {
    y[i] = v
}
ログイン後にコピー
  • Struct スライスのインターフェイス: []MyStruct スライスを保持するにはインターフェイス変数を使用します:
var y interface{}
y = x
ログイン後にコピー

後者のシナリオでは、インターフェイスは基礎となる []MyStruct スライスへの抽象参照を保持します。多態性の動作。

以上がGo Struct 配列をインターフェイス配列に割り当てるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート