1 回答
TA贡献1752条经验 获得超4个赞
使用子引擎。
gin.New
您可以仅使用内部路由实例化引擎而不运行它。相反,您将上下文从您的Any
路线传递到Engine.HandleContext
.
这将从主引擎传递上下文,并将根据子路由中的占位符匹配路径参数。
您可以像往常一样在子引擎上声明路由:
func main() {
internalEngine := gin.New()
internalEngine.GET("/internal/dosomething1", func(c *gin.Context) { c.JSON(200, "ok") })
internalEngine.GET("/internal/dosomething2/:id", func(c *gin.Context) { c.JSON(200, c.Param("id")) })
mainEngine := gin.New()
mainEngine.Any("/*uri", func(c *gin.Context) {
path := c.Param("uri")
if strings.HasPrefix(path, "/internal/") {
uri := strings.Split(path, "/")
switch uri[2] {
case "dosomething1", "dosomething2":
internalEngine.HandleContext(c)
}
} else {
doExternal(c)
}
})
mainEngine.Run(":8800")
}
您还可以c.Request.URL.Path在将上下文中继到子引擎之前进行修改,例如internal,如果您愿意,可以删除前缀。
现在,如果您尝试 GET 请求:
http://localhost:8855/internal/dosomething2/1234
它将回显输出:
"1234"
- 1 回答
- 0 关注
- 66 浏览
添加回答
举报