Go 中 MongoDB 的嵌入類型和 JSON 編組
在 MongoDB 中,嵌入類型是表示分層資料結構的常用方法。然而,當使用帶有嵌入類型的 Go 的 JSON 編碼器時,重要的是要考慮如何處理省略的欄位。
假設你有一個 User 結構,其中的 Secret 字段用 json:"-" 註釋,以將其從常規 JSON 中排除回應。若要傳回管理員使用者的 Secret 字段,您可能會想要建立一個具有重複 Secret 欄位的單獨的 adminUser 結構。但是,這種方法會重複程式碼並可能導致維護問題。
相反,請考慮對 adminUser 中的 User 欄位使用 bson:",inline" 標籤。這指示 JSON 編碼器內聯嵌入結構的字段,有效地將它們組合成單一 JSON 物件。
type adminUser struct { User `bson:",inline"` Secret string `json:"secret,omitempty" bson:"secret,omitempty"` }
但是,這種方法在從 MongoDB 讀取時可能會引入重複的鍵錯誤,因為 adminUser 和使用者包含 Secret 欄位。若要解決此問題,請從 User 中刪除 Secret 字段,並將其僅包含在 adminUser 中。
type User struct { Id bson.ObjectId `json:"id,omitempty" bson:"_id,omitempty"` Name string `json:"name,omitempty" bson:"name,omitempty"` } type adminUser struct { User `bson:",inline"` Secret string `json:"secret,omitempty" bson:"secret,omitempty"` }
現在,當檢索具有管理員使用者的使用者時,Secret 欄位將包含在 JSON 回應中。
func getUser(w http.ResponseWriter, r *http.Request) { ....omitted code... var user adminUser err := common.GetDB(r).C("users").Find( bson.M{"_id": userId}, ).One(&user) if err != nil { return } common.ServeJSON(w, &user) }
此方法保留了 User 結構的單一事實來源,並允許您根據使用者權限動態包含或排除秘密欄位。
以上是如何在 Go 中使用 MongoDB 處理嵌入式類型和 JSON 封送處理?的詳細內容。更多資訊請關注PHP中文網其他相關文章!