Gin (二) 参数 路由分组

获取

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()

}
相关推荐
码事漫谈4 小时前
多人共用一个 key,缓存命中率会不会因此降低?
后端
考虑考虑5 小时前
docker compose环境变量替换
运维·后端·自动化运维
武雄(小星Ai)6 小时前
飞书API上传26MB文件偶发失败:错误码9499与空响应体排坑实录
后端·api·排坑实录
徐小夕6 小时前
JitWord 4.0 万字分享:从协同工具到AI Word操作系统,聊聊3年产品创业史
前端·vue.js·后端
geovindu7 小时前
CSharp: Observer Pattern
开发语言·后端·观察者模式·设计模式·c#·.netcore·行为模式
Flynt8 小时前
把公司项目迁到 Spring Boot 4.0:编译通过只是开始
java·spring boot·后端
IT_陈寒8 小时前
Redis误用keys命令把生产环境搞崩了,血的教训
前端·人工智能·后端
她的男孩9 小时前
多租户和数据权限怎么共存?扒完拦截器注册链路,我找到 4 个隐蔽的坑
java·后端·架构
用户8356290780519 小时前
使用 Python 设置 Excel 页眉和页脚
后端·python
步行cgn9 小时前
IoC 控制反转:从概念到 Spring 的实现
后端