【工程化】gin框架API及代码使用示例

获取Get参数

  1. 使用 c.DefaultQuery
  2. 使用 c.Query
  3. 使用 c.getQuery
r.GET("/web", func(c *gin.Context) {
		x := c.Query("x")
		y := c.DefaultQuery("y", "y")
		z, ok := c.GetQuery("z")
		if !ok {
			z = "z"
		}
		c.JSON(200, gin.H{
			"x": x,
			"y": y,
			"z": z,
		})
	})

获取表单参数

c.PostForm()用于获取POST请求中表单参数的方法。c.PostForm()只能获取application/x-www-form-urlencodedmultipart/form-data类型的表单数据。如果表单中不存在该字段,会返回空字符串。

func HandleForm(c *gin.Context) {
    username := c.PostForm("username")
    email := c.DefaultPostForm("email", "default@example.com")
    
    if username == "" {
        c.JSON(400, gin.H{
            "error": "用户名不能为空"
        })
        return
    }
    
    // 处理表单数据
    c.JSON(200, gin.H{
        "username": username,
        "email": email
    })
}

添加中间件

  • r.Use()是Gin框架中用于添加全局中间件的方法。中间件可以在处理请求之前或之后执行特定的操作,如日志记录、权限验证、跨域处理等。
  • 中间件按照添加的顺序依次执行
  • 可以使用c.Next()继续处理请求
  • 使用c.Abort()可以中断请求处理
  • 中间件可以修改请求和响应
  • 全局中间件会对所有路由生效
r := gin.Default()

// 添加一个简单的日志中间件
r.Use(gin.Logger())

// 添加全局错误恢复中间件
r.Use(gin.Recovery())

请求头/响应头

  1. 获取请求头
// 获取特定的请求头
userAgent := c.GetHeader("User-Agent")

// 也可以使用
contentType := c.Request.Header.Get("Content-Type")
  1. 设置响应头
// 设置单个响应头
c.Header("Content-Type", "application/json")

// 设置多个响应头
c.Header("X-Custom-Header", "Hello")
c.Header("Cache-Control", "no-cache")

绑定Uri

  1. 基本路径参数绑定,使用c.Param
// 定义路由
r.GET("/user/:id", func(c *gin.Context) {
    // 获取路径参数
    id := c.Param("id")
    c.JSON(200, gin.H{
        "user_id": id,
    })
})
  1. 多个路径参数,使用c.Param
r.GET("/user/:name/profile/:id", func(c *gin.Context) {
    name := c.Param("name")
    id := c.Param("id")
    c.JSON(200, gin.H{
        "name": name,
        "id": id,
    })
})
  1. 结构体绑定,使用c.ShouldBindUri
type UserParams struct {
    ID   string `uri:"id"`
    Name string `uri:"name"`
}

func GetUser(c *gin.Context) {
    var params UserParams
    // 绑定URI参数到结构体
    if err := c.ShouldBindUri(&params); err != nil {
        c.JSON(400, gin.H{"error": err.Error()})
        return
    }
    
    c.JSON(200, gin.H{
        "user_id": params.ID,
        "name": params.Name,
    })
}

// 路由定义
r.GET("/user/:name/:id", GetUser)
  1. 通配符参数,使用c.Param
r.GET("/file/*filepath", func(c *gin.Context) {
    // 匹配从 /file/ 开始的所有路径
    filepath := c.Param("filepath")
    c.JSON(200, gin.H{
        "path": filepath,
    })
})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

百川Cs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值