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

Golang で匿名構造体のスライスを定義された構造体のスライスに変換するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-10-26 16:33:30425ブラウズ

How to Convert a Slice of Anonymous Structs to a Slice of Defined Structs in Golang?

Golang の構造体のスライス間の型変換

この調査は、構造体のスライス間の型変換を中心にしています。具体的には、匿名構造体のスライスを定義された構造体のスライスに変換することを目的としています。

根本的な問題

この問題は、2 つの構造体のタイプの違いによって発生します。

  • Name という名前の単一フィールドを持つ Societe 構造体
  • JSON:"a.name" でタグ付けされた Name という名前の単一フィールドを持つ匿名構造体

タグの存在個別の構造体型を作成し、直接変換を防ぎます。

ソリューション オプション

オプション 1: 反復とコピー

  • 両方のスライスと各フィールドを匿名構造体から Societe 構造体に手動でコピーします。
  • このアプローチは安全で信頼性がありますが、反復的な性質のため効率が低くなります。
<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(&amp;res)), nil</code>

ベスト プラクティス

  • 表す適切な構造体を定義します。データ モデル。
  • 型の安全性を維持するために、必要に応じて明示的な型変換を使用します。
  • 信頼性の高い変換を実現するには、安全な反復とコピーのアプローチを選択します。

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

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