首頁 > 後端開發 > Golang > 如何使用 SQLX 有效掃描巢狀結構?

如何使用 SQLX 有效掃描巢狀結構?

Patricia Arquette
發布: 2024-11-22 09:07:14
原創
399 人瀏覽過

How to Effectively Scan Nested Structs Using SQLX?

結構中的結構:SQLX 進階掃描指南

使用SQLX 時,您可能會遇到將資料掃描到巢狀結構中的挑戰。讓我們考慮這個範例:

type Customer struct {
   Id     int    `json:"id" db:"id"`
   Name   string `json:"name" db:"name"`
   Address Address `json:"adress"` // Oops, missing embedded property
}
type Address struct {
   Street string `json:"street" db:"street"`
   City   string `json:"city" db:"city"`
}
登入後複製

嘗試使用此定義掃描資料時,您將遇到以下錯誤:

missing destination name street in *models.Customer
登入後複製

解決方案:擁抱嵌入式結構

解決這個問題的關鍵在於理解SQLX的深度掃描能力。如文件所示,它支援嵌入結構,將其欄位提升到父結構中。要實現此目的,只需將地址嵌入到客戶中即可:

type Customer struct {
   Id     int    `json:"id" db:"id"`
   Name   string `json:"name" db:"name"`
   Address Address
}
登入後複製

請注意,我們刪除了地址字段自己的 db 標籤,因為它不再是單獨的實體。

警告:扁平化JSON 輸出

但是,嵌入位址會扁平化 Customer 的 JSON 輸出struct,因為 Name 和 City現在都是直接屬性:

{
    "id": 1,
    "name": "foo",
    "street": "bar",
    "city": "baz"
}
登入後複製

可能的替代方案

如果不需要這樣做,有幾種替代方法:

  1. 重新映射:將資料掃描到map[string]interface{} 並使用自訂邏輯重新映射它。
  2. 定義接口類型:建立一個表示所需資料結構的接口,並使用 Address 和 Customer 結構實現它。

以上是如何使用 SQLX 有效掃描巢狀結構?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板