获取
1. 获取 URL 路径参数(/user/:id)
go
// 路由定义
r.GET("/user/:id", func(c *gin.Context) {
// 获取
id := c.Param("id")
name := c.Param("name")
c.JSON(200, gin.H{"id": id})
})
2. 获取 URL 查询参数(?id=1&name=xxx)
go
// 地址:/user?id=100&name=张三
r.GET("/user", func(c *gin.Context) {
// 必选参数
id := c.Query("id")
// 有默认值(取不到时用默认值)
name := c.DefaultQuery("name", "匿名用户")
c.JSON(200, gin.H{"id": id, "name": name})
})
3. 获取 POST 表单参数(form-data /x-www-form-urlencoded)
go
r.POST("/login", func(c *gin.Context) {
// 获取表单
username := c.PostForm("username")
password := c.PostForm("password")
// 带默认值
remember := c.DefaultPostForm("remember", "0")
})
4. 获取 JSON 格式参数(最常用!)
第一步:定义结构体
c
type User struct {
Username string `json:"username" binding:"required"`
Password string `json:"password" binding:"required"`
}
第二步:绑定
go
r.POST("/user", func(c *gin.Context) {
var user User
// 绑定 JSON
if err := c.ShouldBindJSON(&user); err != nil {
c.JSON(400, gin.H{"msg": "参数错误"})
return
}
c.JSON(200, user)
})
二、获取请求头(Header)
go
token := c.GetHeader("token")
agent := c.GetHeader("User-Agent")
// 获取ip
ip := c.ClientIP()
//文件上传
file, _ := c.FormFile("avatar")
c.SaveUploadedFile(file, "./static/"+file.Filename)
路由分组
go
package main
import "github.com/gin-gonic/gin"
// 鉴权
func authCheck() gin.HandlerFunc{
return func(c *gin.Context){
token := c.GetHeader("token")
if token == "" {
c.AbortWithStatusJSON(401, gin.H{"msg":"请先登录"})
return
}
c.Next()
}
}
func main(){
// 分组
router := gin.Default()
userRouter := router.Group("/user")
userRouter.GET("/list",func(c *gin.Context){
c.String(200, "hello world")
})
userRouter.GET("/new", func(c *gin.Context){
c.String(200, "hello new")
})
adminRouter := router.Group("/admin")
adminRouter.GET("/login", func(c *gin.Context){
c.String(200, "login")
})
adminRouter.GET("/logout", func(c *gin.Context){
c.String(200, "logout")
})
// 分组嵌套
adminManagerRouter := adminRouter.Group("/manager")
adminManagerRouter.GET("/newUser", func(c *gin.Context){
c.String(200, "增加成员成功")
})
deleteRouter :=router.Group("/delete",authCheck())
deleteRouter.GET("/name", func(c *gin.Context){
c.String(200, "delete name")
})
router.Run()
}