處理包含選用欄位的表單時,通常將這些欄位表示為空字串、錯誤布林值或空字串、錯誤布林值或JSON 中的零值整數。然而,當在 Golang 結構中使用 omitempty 標誌時,這些值在映射過程中會被明確忽略,這可能會導致在 MongoDB 中更新文件時出現問題。
考慮一個 Coupon 結構欄位標記為 omitempty 的 Golang:
type Coupon struct { Id int `json:"id,omitempty" bson:"_id,omitempty"` Name string `json:"name,omitempty" bson:"name,omitempty"` Status bool `json:"status" bson:"status"` }
在初始保存期間,所有非空白欄位都成功儲存在MongoDB。然而,在後續更新中,如果任何可選欄位已修改為空值(例如,未選取的核取方塊),則 omitempty 標誌會阻止空值對應到結構中。結果,更新操作無法修改現有欄位的值。
出現此問題的原因是 bool 和 int 型別只有兩種可能的值(false 和 true,0 和分別為非零)。為了適應 bool 欄位和 int 欄位的類似情況表示三種狀態(不更新、設定為 false 或設為 true)的需要,應修改結構體欄位以使用指標。
type Coupon struct { Id *int `json:"id,omitempty" bson:"_id,omitempty"` Name string `json:"name,omitempty" bson:"name,omitempty"` Status *bool `json:"status" bson:"status"` }
對於指針,nil 值表示省略的欄位。對於非零指針,指向的值表示欄位的值。因此,可以處理以下場景:
利用指針和omitempty 標誌,您可以有效地處理Golang 結構中的可選字段,同時確保正確執行更新而不會覆寫MongoDB 中的現有值。
以上是更新 MongoDB 文件時如何在 Go 中使用 omitempty 處理選用欄位?的詳細內容。更多資訊請關注PHP中文網其他相關文章!