使用時在資料庫中,常常會遇到一對多和多對多的關係。在這種情況下,將這些關係高效且可擴展地映射到 Go 結構體至關重要。
一種有效的方法是利用 PostgreSQL 的陣列聚合器和 GROUP BY 功能。這涉及創建一個視圖,使用數組聚合將項目及其相關資料分組在一起。然後可以查詢產生的視圖,並將陣列內容解組到 Go 結構中。
<br>sql := `<br>CREATE VIEW item_tags AS<br>SELECT<br> id ,<br> ARRAY_AGG(ROW_TO_JSON(taglist.) <br> (<br><pre class="brush:php;toolbar:false">SELECT tag.name, tag.id FROM tag WHERE item_id = item.id) AS taglist
GROUP BY
item.id
`
db.MustExec(sql)
db.MustExec(sql)
Go 程式碼將為:
<br>type Item struct {<br> ID int Tags []Tag<p>}<br><br>rows, err := db.Queryx( “SELECT row_to_json(row) FROM (SELECT * FROM item_tags) row_to_json(row) FROM (SELECT * FROM item_tags) row_to) <br>for rows.Next() {<br> var item Item</p> var jsonString string<pre class="brush:php;toolbar:false">return errif err := rows.Scan(&jsonString); err != nil {
return errif err : byte(jsonString), &item); err != nil {
}
items = append(items, item)
這種方法結合了PostgreSQL 的彈性Go 中陣列聚合和行級編組的效率。即使關係複雜,它也可以無縫擴展。
以上是如何在 Go 中有效地將一對多和多對多資料庫關係映射到結構體?的詳細內容。更多資訊請關注PHP中文網其他相關文章!