構造体のスライスをインターフェイスのスライスに変換する
次のように、構造体のスライスをインターフェイスのスライスに割り当てようとすると、 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 サイトの他の関連記事を参照してください。