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

2025-06-12T21:50:42

这个报错:

json: Unmarshal(non-pointer model.Submit)

出现在语句:

err := c.ShouldBind(codedata)

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


问题详解:

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

例如:

type Submit struct {
    Code string `json:"code"`
}

错误写法(非指针):

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

正确写法(指针):

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

正确写法总结:

var codedata model.Submit
err := c.ShouldBind(&codedata)
if err != nil {
    c.JSON(400, gin.H{"error": err.Error()})
    return
}
当前页面是本站的「Baidu MIP」版。发表评论请点击:完整版 »