[英]GO: import a struct and rename it in json
我用gorm在 go 建立了一個數據庫。 為此,我創建了一個結構,並使用這個結構創建了一個表。 到目前為止,一切都很好。 在后端一切正常,但在前端問題是被調用的 JSON 總是返回大寫的 ID,而swagger為我生成一個小寫的 ID。 Go 中有沒有一種方法可以用 JSON 標識符覆蓋從 gorm 導入的結構?
type Report struct {
gorm.Model
CreatedBy User `gorm:"foreignKey:CreatedByUserID" json:"createdBy"`
Archived bool `json:"archived"`
}
這個結構給了我以下回應
{
"ID": 8,
"CreatedAt": "2022-11-15T20:45:16.83+01:00",
"UpdatedAt": "2022-12-27T21:34:17.871+01:00",
"DeletedAt": null
"createdBy": {
"ID": 1,
"CreatedAt": "2022-11-15T20:02:17.497+01:00",
"UpdatedAt": "2022-11-15T20:02:17.497+01:00",
...
},
"archived": true,
}
有沒有辦法讓 ID 小寫(比如Archived
)? 或者我可以在swaggo中調整它,以便它以大寫形式生成。
我所看到的是,您可以在沒有這個gorm.Model
的情況下制作表格,並自己定義所有屬性。 問題是我必須自己創建這些列的所有功能(刪除、更新、索引、主鍵……)。
您可以使用映射結構package 。
mapstructure 是一個 Go 庫,用於將通用 map 值解碼為結構,反之亦然
如果你想用自定義 json 標簽嵌入 gorm.Model 的 ID 字段,並且你希望它在同一個結構上而不是在“子結構”中,你可以在嵌入的 model 上使用mapstructure:",squash"
標簽。
type Model struct {
ID uint `json:"id"`
}
type Report struct {
Model `mapstructure:",squash"`
Archived bool `json:"archived"`
}
func main() {
input := map[string]interface{}{
"id": 1,
"archived": false,
}
var report Report
if err := mapstructure.Decode(input, &report); err != nil {
panic(err)
}
fmt.Println("Report ID:", report.ID)
fmt.Println("Report ID via Model:", report.Model.ID)
}
如您所見,使用mapstructure.Decode
方法,您可以使用 squash 選項將 map 轉換為結構,然后您可以直接訪問報告的 ID。 請注意,您仍然可以訪問report.Model
及其所有字段。
使用 mapstructure,您可以根據需要將 ID 設為小寫,並且還可以直接從報告結構訪問,而不僅僅是從 Model 子結構訪問。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.