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 關注
- 118 瀏覽
添加回答
舉報