- 组件分享之后端组件——利用Go的反射实现Gin路由的自动添加小组
- 组件分享之后端组件——在gin中有效使用go-oauth2的组件
- 组件分享之后端组件——一个Go 的 Swagger 2.0 实现
- 组件分享之后端组件——在Go中实现的断路器gobreaker
- 组件分享之后端组件——Go开发自动化代码工具包tools
- 组件分享之后端组件——基于Gin + Vue + Element
- 组件分享之后端组件——用于构建 Go HTTP 服务的轻量级、惯
- 组件分享之后端组件——用于构建 Go HTTP 服务的轻量级、惯
- 组件分享之后端组件——基于Golang实现的Hystrix使用中
- 组件分享之后端组件——Go开发的单点登录应用组件authelia
组件分享之后端组件——利用Go的反射实现Gin路由的自动添加小组件ginhelper
背景
近期正在探索前端、后端、系统端各类常用组件与工具,对其一些常见的组件进行再次整理一下,形成标准化组件专题,后续该专题将包含各类语言中的一些常用组件。欢迎大家进行持续关注。
组件基本信息
- 组件:ginhelper
- 开源协议:MIT license
内容
本节分享一个利用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/95597380
https://github.com/zzjcool/ginHelper
更多前后端组件,可以持续关注我,我将持续给大家分享各种各样的组件包。
本文声明:
88x31.png知识共享许可协议
本作品由 cn華少 采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可。
网友评论