gin 获取所有参数_利用Go的反射实现Gin路由的自动添加

2f93d31d60767992a267a424c6b5c053.png

最近在用Go的Gin框架写点东西,添加API的路由的时候每次都要在引用gin的地方修改增加路由规则,而且多人协同的话很容易发生冲突,所以在想能不能每次编写一个handlerFunc的时候可以自动加载进Gin中,经过研究后发现可以利用Go的反射机制来实现相关功能。

基本的思想:

在实现hanlderFunc的包中定义一个结构体

type Helper struct {
}

然后为这个结构体定义不同的方法,该方法返回HandlerFunc函数以及相关的路由信息。

之后在包的外部实现一个反射函数,将Helper传入函数中,利用反射获取结构体所有的方法,并且逐一调用,这样子就可以实现只要在包外定义一个语句后把包中所有的handlerFunc都调用。

这种方法应该也可以使用在其他的框架上,因为现在暂时只用Gin所以就写了一个ginHelper包可以直接调用实现。

CCChieh/ginHelper​github.com
5f7a8c6236b316ece4a00b59c8bb2c20.png

ginHelper

ginHelper是一个自动把handlerFunc添加到Gin并且设置路由的工具包。

  1. 在存放handlerFunc的文件夹中任意位置写下
type helper struct {
}
  1. 之后每次写handlerFunc的时候都类似下方的helloHandler前面加上一个 *helper的一个方法HelloHandler()中设置路由。
func (h *Helper) HelloHandler() (r *ginHelper.Router) {
    return &ginHelper.Router{
        Path:   "/HelloHandler",
        Method: "GET",
        Handlers: []gin.HandlerFunc{
            helloHandler,
        }}
}
func helloHandler(c *gin.Context) {

    c.String(http.StatusOK, "Hello world!")
}
  1. 在运行gin的时候
r := gin.New()

自动导入handler文件夹中的所有路由

ginHelper.Build(new(handler.Helper), r)

将user文件夹中所有的路由导入到同一个路由组中

ginHelper.Build(new(user.Helper), r.Group("/user"))
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值