组件分享之后端组件——利用Go的反射实现Gin路由的自动添加小组件ginhelper

组件分享之后端组件——利用Go的反射实现Gin路由的自动添加小组件ginhelper

背景

近期正在探索前端、后端、系统端各类常用组件与工具,对其一些常见的组件进行再次整理一下,形成标准化组件专题,后续该专题将包含各类语言中的一些常用组件。欢迎大家进行持续关注。

组件基本信息

内容

本节分享一个利用Go的反射实现Gin路由的自动添加小组件ginhelper,它可以整合gin的参数绑定与路由设置和非注释自动生成swagger。

其中结构体划分如下:

// GroupRouter 路由组
type GroupRouter struct {
 Path   string   // 路由组的根路径,与Gin的Group一样,定义一组接口的公共路径
 Name   string   // 路由组的名称
 Routes []*Route // 路由组中的具体路由
}
// Router 路由
type Route struct {
 Param    Parameter         // 接口的参数实现
 Path     string            // 接口的路径
 Method   string            // 接口的方法
 Handlers []gin.HandlerFunc // 接口的额外处理函数
}
// 参数绑定
// 为了成功绑定参数,并降低代码的重复度,需要参数实现Parameter接口:
type Parameter interface {
 Bind(c *gin.Context, p Parameter) (err error)  //绑定参数
 Handler(c *gin.Context) (data Data, err error) //执行具体业务
 Result(c *gin.Context, data Data, err error)   //结果返回
}

具体使用方式如下:

// 定义一个Group
var testGroup = &ginhelper.GroupRouter{
 Path: "test",
 Name: "Mytest",
 Routes: []*ginhelper.Route{
  {
   Param:  new(testBodyParam),
   Path:   "/hello/:id",
   Method: "POST",
  }},
}

type FooStruct struct {
 FooA string `binding:"required" `
 FooB *bool  `binding:"required"`
}

// 接口的参数
type testBodyParam struct {
 ginhelper.BaseParam `json:"-"`
 Foo       string    `binding:"required"`
 FooName   string    `json:"fName" binding:"required"`
 FooInt    int       `binding:"required"`
 FooIgnore string    `json:"-"`
 FooStruct
 FooStruct2 FooStruct
 FooStruct3 *FooStruct
}

func (param *testBodyParam) Handler(c *gin.Context) (data ginhelper.Data, err error) {
 return param, nil
}


func Example() {
 router := gin.Default()
 r := router.Group("api")
    // 如果不需要swagger,可以使用New初始化
 h := ginhelper.NewWithSwagger(&ginhelper.SwaggerInfo{
  Description: "swagger test page",
  Title:       "Swagger Test Page",
  Version:     "0.0.1",
  ContactInfoProps: ginhelper.ContactInfoProps{
   Name:  "zzj",
   URL:   "https://zzj.cool",
   Email: "email@zzj.cool",
  },
 }, r)
 h.Add(testGroup, r)
 _ = router.Run(":8888")
}

如果开启了swagger的话,访问http://127.0.0.1:8888/api/swagger即可。

本文参考内容https://zhuanlan.zhihu.com/p/95597380https://github.com/zzjcool/ginHelper

更多前后端组件,可以持续关注我,我将持续给大家分享各种各样的组件包。

本文声明:
88x31.png
知识共享许可协议
本作品由 cn華少 采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

CN華少

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

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

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

打赏作者

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

抵扣说明:

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

余额充值