在 Gin 框架的 Web 开发中,参数绑定是一个高频操作。当我们需要将请求参数映射到结构体时,总会面临一个选择:用 Bind() 还是 ShouldBind()?这两个方法看似相似,实则有着本质的区别。选错了,可能会让你的错误处理变得混乱;选对了,代码会更加优雅清晰。

Bind() 方法的设计理念是"约定优于配置"。当参数绑定失败时,它会自动设置响应状态码为 400,并返回错误信息,然后终止请求处理流程。

type LoginForm struct {
    User     string `form:"user" binding:"required"`
    Password string `form:"password" binding:"required"`
}

r.POST("/login", func(c *gin.Context) {
    var form LoginForm

    if err := c.Bind(&form); err != nil {
        return // Bind 已自动返回 400 响应
    }

    c.JSON(200, gin.H{"status": "ok"})
})