ホームページ  >  記事  >  バックエンド開発  >  Go で構造体のスライス間を安全に変換する方法: 型変換のガイドとベスト プラクティス

Go で構造体のスライス間を安全に変換する方法: 型変換のガイドとベスト プラクティス

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-31 10:50:02253ブラウズ

How to Safely Convert Between Slices of Structs in Go: A Guide to Type Conversion and Best Practices

Go での構造体のスライス間の型変換

Go で構造体のスライスを操作する場合、さまざまな構造体のスライス間の違いを理解することが重要です。種類。この場合、次の型があります:

  • ListSociete: Societe 構造体のリストを保存するために使用されるカスタム構造体型。
  • [ ]Societe: Societe 構造体のスライス。
  • []struct{Name string json:"a.name"}: 単一フィールド Name とJSON タグ。

質問 1: []struct{Name string} と []struct{Name string json:"a.name" } は異なりますか?

はい、JSON タグ json:"a.name" により、これらは異なります。 Go の仕様では、2 つの構造体型が同じフィールド、名前、型、 および タグを持つ場合にのみ同一であると明確に述べられています。

質問 2: ListSociete は []struct{Name string} とは異なりますか?

はい、ListSociete はカスタム型であるのに対し、[]struct{Name string} は匿名型であるため、それらは異なります。また、フィールド名も異なります。

_ソリューション:

これらのタイプ間の変換には 2 つのオプションがあります:

オプション 1: 反復によるコピー

この方法は安全で信頼性がありますが、明示的なコピーが必要です:

<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>

このメソッドは、予期しない動作を引き起こす可能性があるため、注意して使用する必要があります。 .

_プレイグラウンドの例: http://play.golang.org/p/lfk7qBp2Gb

以上がGo で構造体のスライス間を安全に変換する方法: 型変換のガイドとベスト プラクティスの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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