本文最后更新于121 天前,其中的信息可能已经过时。
Gin框架中获取请求参数方式
GET
app := gin.Default()
// 使用GET请求并获取参数
app.GET("/user", func(c *gin.Context) {
// 使用Query获取请求参数
username := c.Query("username")
password := c.Query("password")
})
POST–From表单形式 关键词post
app := gin.Default()
// 使用POST请求并获取参数
app.POST("/user", func(c *gin.Context) {
// 使用PostForm获取请求参数
username := c.PostForm("username")
password := c.PostForm("password")
})
POST–JSON形式 关键词Json
//先定义一个用来接收json数据的结构体,json:"username" 表示Username 用来返回给前端的key即这样返回
{
"username":Username,
"password":Password,
}
type User struct {
Username string `json:"username"`
Password string `json:"password"`
}
app := gin.Default()
// 使用POST请求并获取参数
app.POST("/user", func(c *gin.Context) {
// 将JSON格式请求参数绑定到结构体上
var user User
if err := c.BindJSON(&user); err != nil {
// 返回错误信息
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
// 返回参数
c.JSON(http.StatusOK,user)
})
URL参数(直接把参数写入url中) 关键词Param
app := gin.Default()
// 使用请求头部参数并获取参数
app.GET("/user/:username/:password", func(c *gin.Context) {
// 使用Request获取请求头部参数
username := c.Request.Header.Get("username")
password := c.Request.Header.Get("password")
// 返回请求参数
c.JSON(200, gin.H{
"username": username,
"password": password,
})
})
获取请求头参数 关键词Header
app := gin.Default()
// 使用请求头部参数并获取参数
app.GET("/user", func(c *gin.Context) {
// 使用Request获取请求头部参数
username := c.Request.Header.Get("username")
password := c.Request.Header.Get("password")
// 返回请求参数
c.JSON(200, gin.H{
"username": username,
"password": password,
})
})
自动映射参数,省去了重复的参数获取和类型转换 关键词Bind
// 定义需要绑定请求参数的结构体
//`form:"username" json:"username" binding:"required"`
// form表示前端传值key 为 front_username 把值绑定到Username字段
// json表示后端传值key 为 back_username 把Username字段的值相应给前端
type User struct {
Username string `form:"front_username" json:"back_username" `
Password string `form:"password" json:"password" `
}
app := gin.Default()
// 使用ShouldBind方法自动绑定请求参数到结构体,并进行校验
app.POST("/user", func(c *gin.Context) {
var user User
if err := c.ShouldBind(&user); err != nil { //根据req的content type 自动推断如何绑定,form/json/xml等格式
c.JSON(400, gin.H{"error": err.Error()})
return
}
//响应数据
c.JSON(200, user)
})
// 运行服务
app.Run(":8080")
只要需要提供结构体, 就能把各个部分的校验规则简单定义, 并且能够对请求中的参数进行一些简单的校验,只有校验通了才能真正的请求后端资源,拒绝无效请求 go完全可以 下面我们来看一些简单的校验规则
binding
标签用于指定 Gin 框架在绑定请求参数时应用的验证规则。通过在结构体字段上添加 binding
标签,你可以定义字段的验证规则,确保请求参数满足预期的条件。以下是一些常见的 binding
标签值和示例说明:
"required"
: 该标签要求字段在请求中必须存在,否则绑定过程将返回错误。type User struct { Username string `form:"username" binding:"required"` Password string `form:"password" binding:"required"` }
"min"
和"max"
: 用于验证数字类型字段的最小和最大值。type AgeValidation struct { Age int `form:"age" binding:"required,min=18,max=99"` }
"len"
和"min"
: 用于验证字符串类型字段的长度。type NameValidation struct { Name string `form:"name" binding:"required,min=3,max=50"` }
"email"
: 用于验证邮箱地址。type EmailValidation struct { Email string `form:"email" binding:"required,email"` }
"url"
: 用于验证 URL 地址。goCopy codetype URLValidation struct { URL string `form:"url" binding:"required,url"` }
这些是一些基本的 binding
标签的使用示例。使用这些标签,你可以定义结构体字段的验证规则,确保请求参数的合法性。在实际应用中,你可以根据具体的验证需求选择合适的标签组合。
示例
package main
import (
"github.com/gin-gonic/gin"
"net/http"
)
type User struct {
Username string `form:"username" json:"username" binding:"required"`
Password string `form:"password" json:"password" binding:"required"`
}
func main() {
app := gin.Default()
app.POST("/ping", func(context *gin.Context) {
var user User
err := context.ShouldBind(&user)
if err != nil {
context.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
context.JSON(http.StatusOK, user)
})
app.Run()
}
当我们的请求参数都传时
当我们请求参数只有
username
时