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

Goで匿名構造体のスライスを非匿名構造体のスライスに変換するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-27 11:40:01864ブラウズ

How to Convert a Slice of Anonymous Structs to a Slice of Non-Anonymous Structs in Go?

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 サイトの他の関連記事を参照してください。

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