案例包括json、表单和URI三种类型的数据
package mainimport ( "net/http" "github.com/gin-gonic/gin")// 定义接收数据的结构体type Login struct { User string `form:"username" json:"username" uri:"username" xml:"username" binding:"required"` Password string `form:"password" json:"password" uri:"password" xml:"password" binding:"required"`}func main() { r := gin.Default() // json r.POST("/loginJSON", func(c *gin.Context) { var json Login if err := c.ShouldBindJSON(&json); err != nil { // 返回错误信息 // gin.H封装了生成json数据的工具 c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } if json.User != "username" || json.Password != "password" { c.JSON(http.StatusBadRequest, gin.H{"status": "304"}) return } c.JSON(http.StatusOK, gin.H{"status": "200"}) }) // form r.POST("/loginForm", func(c *gin.Context) { var form Login // Bind默认解析并绑定form格式 // 根据请求头中content-type自动推断 if err :=c.Bind(&form); err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } if form.User != "username" || form.Password != "password" { c.JSON(http.StatusBadRequest, gin.H{"status": "304"}) return } c.JSON(http.StatusOK, gin.H{"status": "200"}) }) // uri r.POST("/loginUri/:username/:password", func(c *gin.Context) { var login Login if err :=c.ShouldBindUri(&login); err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } if login.User != "username" || login.Password != "password" { c.JSON(http.StatusBadRequest, gin.H{"status": "304"}) return } c.JSON(http.StatusOK, gin.H{"status": "200"}) }) r.Run()}