json Unmarshal(non-pointer model.Submit)报错

这个报错:

  1. json: Unmarshal(non-pointer model.Submit)

出现在语句:

  1. err := c.ShouldBind(codedata)

说明在调用 ShouldBind 时传入了一个 非指针类型 的参数,而它需要一个指针类型来把 JSON 数据反序列化进去。


问题详解:

在 Go 的 encoding/json 包(Gin 的绑定底层也是用它)中,json.Unmarshal 必须接收一个指针,否则无法修改原变量的值。

例如:

  1. type Submit struct {
  2. Code string `json:"code"`
  3. }

错误写法(非指针):

  1. var codedata model.Submit // 这是值类型
  2. err := c.ShouldBind(codedata) // 这里会报错:json: Unmarshal(non-pointer model.Submit)

正确写法(指针):

  1. var codedata model.Submit
  2. err := c.ShouldBind(&codedata) // 正确,传指针

正确写法总结:

  1. var codedata model.Submit
  2. err := c.ShouldBind(&codedata)
  3. if err != nil {
  4. c.JSON(400, gin.H{"error": err.Error()})
  5. return
  6. }
添加新评论