ホームページ >バックエンド開発 >Golang >Go で構造体のスライスをインターフェイスのスライスに変換するにはどうすればよいですか?

Go で構造体のスライスをインターフェイスのスライスに変換するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-03 22:56:11950ブラウズ

How to Convert a Slice of Structs to a Slice of Interfaces in Go?

構造体のスライスをインターフェイスのスライスに変換する

次のように、構造体のスライスをインターフェイスのスライスに割り当てようとすると、 AppEngine の datastore.PutMulti にデータを渡す場合、型の互換性がないためにコンパイル エラーが発生する可能性があります。エラーは「代入では type []*MyStruct を type []interface { } として使用できません。」

この問題を理解するには、構造体のスライスをインターフェイスのスライスに割り当てることを認識することが重要です。単純な型変換以上のものを必要とします。代わりに、各構造体要素をインターフェイス内で個別にラップする必要があります。このプロセスでは、元の構造体へのポインターが作成され、その型の記述子が含まれます。

その結果、構造体のスライスをインターフェイスのスライスにコピーする直接的または自動化された方法はありません。目的の出力を実現するには、各要素を明示的にコピーしてインターフェイス内でラップする必要があります。したがって、唯一の実行可能な解決策は、一度に 1 要素ずつ代入を実行することです。

例として次のスニペットを考えてみましょう:

var src []*MyStruct = append(src, &MyStruct {...})
var dest []interface{}
for _, s := range src {
    dest = append(dest, s)
}

この例では、構造体のスライスが反復されます。各構造体は、インターフェイスで明示的にラップすることによってインターフェイスのスライスに追加されます。このプロセスは面倒かもしれませんが、構造体のスライスをインターフェイスのスライスに正常に変換する唯一の方法です。

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

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