使用 依赖注入 获取 GIN 的 HTTP请求参数

GIN 读取HTTP参数

我们使用gin时,获取参数的方式,一般如下:

获取请求中的Query

	r.GET("/user/search", func(c *gin.Context) {
		username := c.DefaultQuery("username", "dapeng")
		address := c.Query("address")
		//...
	})

获取form参数

	r.POST("/user/search", func(c *gin.Context) {
		username, ok := c.GetPostForm("username")
		//...
	})

获取json

//...
type Login struct {
	User     string `form:"user" json:"user" binding:"required"`
	Password string `form:"password" json:"password" binding:"required"`
}

//...
	r.POST("/loginJSON", func(c *gin.Context) {
		var login Login

		// 将请求中的JSON数据绑定到Login结构体
		if err := c.ShouldBind(&login); err == nil {
			//...
		} else {
			//...
		}
	})

怎样减少这些样板的代码的编写的呢?

如果可以这样读取query参数:

	ctr.POST(
			"/hello",
			func(in struct {
				yourName string `gone:"http,query=name"` //注册请求query中的name参数
				name string `gone:"http,query"` //注册请求query中的name参数;不指定参数名,则取属性名作为参数名
                age int `gone:"http,query=age"` //int类型
			}) string {
				return fmt.Sprintf("hello, %s, your name is %s", in.yourName, in.name)
			},
		)

这样读取json(xml或者form-data)请求:

	type Req struct {
		Page     string   `form:"page" json:"page,omitempty" xml:"page" binding:"required"`
		PageSize string   `form:"pageSize" json:"pageSize,omitempty" xml:"pageSize" binding:"required"`
		Keywords []string `form:"keywords" json:"keywords,omitempty" xml:"keywords" binding:"required"`
	}

	ctr.rootRouter.
		Group("/demo").
		POST(
			"/hello",
			func(in struct {
				req Req `gone:"http,body"`
			}) string {
				fmt.Println(in.req)
				return fmt.Sprintf("hello, keywords is [%v]", in.req.Keywords)
			},
		)

会不会好一点呢?

这就是Gone框架的处理HTTP请求的方式,不仅支持 Query、JSON请求的注入,还支持:

  • 请求头的注入
  • Cookie的注入
  • 请求上下文的注入
  • 等等…

更多 HTTP请求注入方式,可以参考官方文档 HTTP 注入说明

Gone框架

Gone 是我们做了一个依赖注入框架,内置了gin做web服务,并且对其做了增强:

  • 请求参数支持依赖注入
  • 请求处理的Handle,返回的参数自动转为HTTP响应

另外,还集成 日志、配置、定时任务、分布式缓存、数据集、消息中间件等功能。


gone的项目地址:https://github.com/gone-io/gone
文档地址:https://goner.fun/zh/

另外,🔥添加交流群,赠送 Golang 多套 学习资料,夯实基础👍🏻👍🏻

下面是课程部分截图:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

dapeng-大鹏

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

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

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

打赏作者

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

抵扣说明:

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

余额充值