Go の構造体のスライス間の型変換
問題:
を試みています匿名構造体のスライスを非匿名構造体のスライスに変換すると、エラーが発生します。これにより、JSON タグの有無にかかわらず構造体の等価性、およびさまざまなスライスの互換性について疑問が生じます。
答え:
構造体の型の違い:
タグが JSON データのエンコードとデコードに影響するため、異なる JSON タグを持つ構造体は異なるタイプとみなされます。
変換オプション:
1. Copy Through Iteration:
これは推奨される方法ですが、速度が遅く、冗長になります。これには、匿名構造体スライスの各要素を非匿名構造体スライスにコピーすることが含まれます。
<code class="go">ls := make(ListSociete, len(res)) for i := 0; i < len(res); i++ { ls[i].Name = res[i].Name } return ls, nil</code>
2.安全でない変換:
これは、両方の構造体型の基礎となるデータ構造が同一であると想定する安全でないメソッドです。
<code class="go">return *(*ListSociete)(unsafe.Pointer(&res)), nil</code>
警告:
安全でない変換は予期しない動作を引き起こす可能性があるため、一般的な使用には推奨されません。これを使用すると、メモリ破損やその他の予期しないエラーが発生する可能性があります。
以上がGoで匿名構造体のスライスを非匿名構造体のスライスに変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。