Go におけるインターフェイス配列割り当ての難題
Go では、以下に示すように、構造体配列をインターフェイス配列に直接割り当てようとします。コンパイル時エラーが発生します:
x := []MyStruct{...} var y []interface{} y = x // Error: cannot use x as type []interface {}
このエラーは、その方法の根本的な違いに起因します。構造体の型とインターフェイスはメモリに保存されます。インターフェイスは、型情報とデータで構成される 2 つの単語のペアとして格納されますが、構造体の型はメモリ内の隣接するフィールドとして格納されます。
これらの表現は一致していないため、この 2 つの間の直接変換は実現できません。要素を宛先スライスに個別にコピーする必要があります。
この問題を解決するには、次のオプションのいずれかを検討してください:
var y []interface{} y = make([]interface{}, len(x)) for i, v := range x { y[i] = v }
var y interface{} y = x
後者のシナリオでは、インターフェイスは基礎となる []MyStruct スライスへの抽象参照を保持します。多態性の動作。
以上がGo Struct 配列をインターフェイス配列に割り当てるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。