データベースを操作する場合、1 対多および多対多のリレーションシップが発生するのが一般的です。このようなシナリオでは、これらの関係を Go 構造体に効率的かつスケーラブルにマッピングすることが重要です。
効果的なアプローチの 1 つは次のとおりです。 PostgreSQL の配列アグリゲータと GROUP BY 機能を活用します。これには、配列集約を使用してアイテムとその関連データをグループ化するビューの作成が含まれます。その後、配列の内容を Go 構造体にアンマーシャリングして、結果のビューをクエリできます。
<br>sql := `<br>CREATE VIEW item_tags AS<br>SELECT<br> id ,<br> ARRAY_AGG(ROW_TO_JSON(taglist.*)) ASタグ<br>FROM<br> (</p> <p>) AS タグリスト<br>GROUP BY<br> item.id<br>`<br>db.MustExec(sql)<br>< /pre></p> <p>Go コードは次のようになります。 be:</p> <p><pre class="brush:php;toolbar:false"><br>type item struct {<br> ID int<br> Tags []Tag<br>}</p> <p>rows、err := db.Queryx( "SELECT row_to_json(row) FROM (SELECT * FROM item_tags) row")<br>for rows.Next() {<br> var item item<br> var jsonString string<br> if err := rows.Scan(&jsonString); err != nil {</p> <p>}<br> if err := json.Unmarshal([]byte(jsonString), &item); err != nil {</p> <p>}<br> items = append(items, item)<br>}<br>
このアプローチは、 PostgreSQL の柔軟性と、Go の配列集約および行レベルのマーシャリングの効率性を兼ね備えています。複雑な関係であっても、シームレスに拡張できます。
推奨されるアプローチは効率的で多用途ですが、質問で言及されている代替ソリューションにはそれぞれ独自の長所があり、弱点:
最終的に、最適なアプローチは特定の要件によって異なります。アプリケーションと利用可能なテクノロジーについて説明します。
以上がGo で 1 対多および多対多のデータベース関係を構造体に効率的にマッピングするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。