我正在使用带有 Gin 的 Go 1.17。这是我的结构:
package model
type Movie struct {
ID string `json:"id"`
Year uint16 `json:"year" binding:"required,lt=3000"`
RentNumber uint32 `json:"rent_number" db:"rent_number" binding:"required,lt=4294967290"`
Title string `json:"title" binding:"required,max=255"`
Author string `json:"author" binding:"required,max=80"`
Editor string `json:"editor" binding:"required,max=125"`
Index string `json:"index" binding:"required,max=125"`
Bib string `json:"bib" binding:"required,max=20"`
Ref string `json:"ref" binding:"required,max=20"`
Cat1 string `json:"cat_1" db:"cat_1" binding:"required,max=20"`
Cat2 string `json:"cat_2" db:"cat_2" binding:"required,max=10"`
}
我在某个处理程序中使用此结构时遇到问题。在这个处理程序中,我只需要使用我的电影结构中的 2 个属性(标题和年份)。如果我正在做这样的事情:
func (h *Handler) myHandler(c *gin.Context) {
var movie model.Movie
if err := c.ShouldBindJSON(&movie); err != nil {
c.Error(err)
c.Abort()
return
}
...
它不起作用,因为在此 Web 服务上我将只发送 2 个属性,并且我将从绑定标签中获得所需的错误:
{
"title": My title",
"year": 2017
}
所以我想知道处理这个问题的“方法”是什么?我可以看到 3 个解决方案。
使用电影结构并忽略除Titleand之外的所有字段Year,但我该怎么做呢?
仅使用所需字段创建特定结构。在这种情况下,我不会将此结构放在模型包中,而是放在我的电影 api 包中
type StructForTheSpecialHandler struct {
Year uint16 `json:"year" binding:"required,lt=3000"`
Title string `json:"title" binding:"required,max=255"`
}
像这样直接在我的处理程序中创建结构:
func (h *Handler) myHandler(c *gin.Context) {
var tmp struct {
Year uint16 `json:"year" binding:"required,lt=3000"`
Title string `json:"title" binding:"required,max=255"`
}
if err := c.ShouldBindJSON(&tmp); err != nil {
c.Error(err)
c.Abort()
return
}
...
你能告诉我你是否有更好的解决方案,或者告诉我我的 3 个解决方案之间的正确方法是什么?
慕码人2483693
相关分类