如何将多个组添加到 gin 路由以实现 api 版本继承?
How to add multiple groups to gin routing for api version inheritance?
我目前正在使用 Go + Gin 开发 API。
API 应包含版本字符串,例如字符串 v1
http://127.0.0.1:3000/v1/user/get_username
没问题,因为我可以用 Gin 创建一个组
v1 := router.Group("/v1")
v1.GET("/user/get_username", modules.UserGetUsername)
但是...如果我启动一个新的 API-Version "v2" 并且函数 UserGetUsername 中的代码没有改变,我必须执行以下操作
v1 := router.Group("/v1")
v1.GET("/user/get_username", modules.UserGetUsername)
v2 := router.Group("/v2")
v2.GET("/user/get_username", modules.UserGetUsername)
是否有更好的解决方案 - 也许是这样的:
v1_v2 := router.Group("/v1").AnotherGroup("/v2")
v1_v2.GET("/user/get_username", modules.UserGetUsername)
感谢您的建议。
我认为Gin没有提供这个,但是看起来很容易写。
type GroupGroup struct {
groups []*gin.RouterGroup
}
func NewGroupGroup(groups []*gin.RouterGroup) GroupGroup {
return GroupGroup {
groups,
}
}
func (g *GroupGroup) handle(method string, path string, handler gin.HandlerFunc) {
for _, group := range g.groups {
group.Handle(method, path, handler)
}
}
然后,你可以像这样使用它:
v1 := router.Group("/v1")
v2 := router.Group("/v2")
g := NewGroupGroup([]*gin.RouterGroup { v1, v2 })
g.handle(http.MethodGet, "hello", sayHello)
g.handle(http.MethodPost, "goodbye", sayGoodbye)
我目前正在使用 Go + Gin 开发 API。
API 应包含版本字符串,例如字符串 v1
http://127.0.0.1:3000/v1/user/get_username
没问题,因为我可以用 Gin 创建一个组
v1 := router.Group("/v1")
v1.GET("/user/get_username", modules.UserGetUsername)
但是...如果我启动一个新的 API-Version "v2" 并且函数 UserGetUsername 中的代码没有改变,我必须执行以下操作
v1 := router.Group("/v1")
v1.GET("/user/get_username", modules.UserGetUsername)
v2 := router.Group("/v2")
v2.GET("/user/get_username", modules.UserGetUsername)
是否有更好的解决方案 - 也许是这样的:
v1_v2 := router.Group("/v1").AnotherGroup("/v2")
v1_v2.GET("/user/get_username", modules.UserGetUsername)
感谢您的建议。
我认为Gin没有提供这个,但是看起来很容易写。
type GroupGroup struct {
groups []*gin.RouterGroup
}
func NewGroupGroup(groups []*gin.RouterGroup) GroupGroup {
return GroupGroup {
groups,
}
}
func (g *GroupGroup) handle(method string, path string, handler gin.HandlerFunc) {
for _, group := range g.groups {
group.Handle(method, path, handler)
}
}
然后,你可以像这样使用它:
v1 := router.Group("/v1")
v2 := router.Group("/v2")
g := NewGroupGroup([]*gin.RouterGroup { v1, v2 })
g.handle(http.MethodGet, "hello", sayHello)
g.handle(http.MethodPost, "goodbye", sayGoodbye)