Go での構造体のスライス間の型変換
Go で構造体のスライスを操作する場合、さまざまな構造体のスライス間の違いを理解することが重要です。種類。この場合、次の型があります:
質問 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 サイトの他の関連記事を参照してください。