Copyright © 2022-2025 aizws.net · 网站版本: v1.2.6·内部版本: v1.25.2·
            页面加载耗时 0.00 毫秒·物理内存 159.1MB ·虚拟内存 1438.3MB
        
        欢迎来到 AI 中文社区(简称 AI 中文社),这里是学习交流 AI 人工智能技术的中文社区。 为了更好的体验,本站推荐使用 Chrome 浏览器。
        
        
        gin 框架提供了大量的方法,用于将前端提交的数据绑定到结构体。
本章提供了 gin 框架的三种将前端数据绑定到结构体的方法。
客户端传参,后端接收并解析到结构体。
package main
import (
   "github.com/gin-gonic/gin"
   "net/http"
)
// 定义接收数据的结构体
type Login struct {
   // binding:"required"修饰的字段,若接收为空值,则报错,是必须字段
   User    string `form:"username" json:"user" uri:"user" xml:"user" binding:"required"`
   Pssword string `form:"password" json:"password" uri:"password" xml:"password" binding:"required"`
}
func main() {
   // 创建路由
   engine := gin.Default()
   // JSON绑定
   engine.POST("loginJSON", func(c *gin.Context) {
      // 声明接收的变量
      var json Login
      // 将request的body中的数据,自动按照json格式解析到结构体
      if err := c.ShouldBindJSON(&json); err != nil {
         // 返回错误信息
         // gin.H封装了生成json数据的工具
         c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
         return
      }
      // 判断用户名密码是否正确
      if json.User != "root" || json.Pssword != "admin" {
         c.JSON(http.StatusBadRequest, gin.H{"status": "304"})
         return
      }
      c.JSON(http.StatusOK, gin.H{"status": "200"})
   })
   engine.Run()
}
运行程序,然后通过命令窗口测试效果。
$ curl http://localhost:8080/loginJSype:application/json -d '{"user":"root","password":"admin"}' -X POST
输出结果为:
{"status":"200"}
$ curl http://localhost:8080/loginJSype:application/json -d '{"user":"root","password":"admin2"}' -X POST
输出结果为:
{"status":"304"}
表单数据解析和绑定就是 html 页面通过 form 提交的数据处理。
以下为前端 html 页面,里面内置了 form,用于向后端提交数据。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <form action="http://localhost:8000/loginForm" method="post" enctype="application/x-www-form-urlencoded">
        用户名<input type="text" name="username">
        密码<input type="password" name="password">
        <input type="submit" value="提交">
    </form>
</body>
</html>
以下为后端处理程序。
package main
import (
    "net/http"
    "github.com/gin-gonic/gin"
)
// 定义接收数据的结构体
type Login struct {
    // binding:"required"修饰的字段,若接收为空值,则报错,是必须字段
    User    string `form:"username" json:"user" uri:"user" xml:"user" binding:"required"`
    Pssword string `form:"password" json:"password" uri:"password" xml:"password" binding:"required"`
}
func main() {
    // 创建路由
    engine := gin.Default()
    // JSON绑定
    engine.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 != "root" || form.Pssword != "admin" {
            c.JSON(http.StatusBadRequest, gin.H{"status": "304"})
            return
        }
        c.JSON(http.StatusOK, gin.H{"status": "200"})
    })
    engine.Run(":8000")
}
将 URI 数据绑定到结构体。
package main
import (
    "net/http"
    "github.com/gin-gonic/gin"
)
// 定义接收数据的结构体
type Login struct {
    // binding:"required"修饰的字段,若接收为空值,则报错,是必须字段
    User    string `form:"username" json:"user" uri:"user" xml:"user" binding:"required"`
    Pssword string `form:"password" json:"password" uri:"password" xml:"password" binding:"required"`
}
func main() {
    // 创建路由
    engine := gin.Default()
    // JSON绑定
    engine.GET("/:user/:password", func(c *gin.Context) {
        // 声明接收的变量
        var login Login
        // Bind()默认解析并绑定form格式
        // 根据请求头中content-type自动推断
        if err := c.ShouldBindUri(&login); err != nil {
            c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
            return
        }
        // 判断用户名密码是否正确
        if login.User != "root" || login.Pssword != "admin" {
            c.JSON(http.StatusBadRequest, gin.H{"status": "304"})
            return
        }
        c.JSON(http.StatusOK, gin.H{"status": "200"})
    })
    engine.Run()
}
运行程序,然后通过命令窗口测试效果。
$ curl http://localhost:8080/root/admin
输出结果为:
{"status":"200"}
                        
                        
            
            
            gin框架 响应的数据格式:gin框架 可以提供多种数据格式的响应,包括json、结构体、XML、YAML 以及 ProtoBuf等格式。