php小编鱼仔为您带来一篇关于在Go语言中使用julienschmidt/httprouter嵌套路由器的简洁指南。julienschmidt/httprouter是一个轻量级的高性能HTTP请求路由器,它可以帮助我们更好地组织和管理路由。本文将详细介绍如何在Go语言中使用julienschmidt/httprouter实现嵌套路由器的功能,以便更好地满足复杂的路由需求。无论您是初学者还是有经验的开发者,本文都将为您提供简单易懂的步骤和示例代码,帮助您轻松掌握嵌套路由器的使用技巧。让我们一起开始吧!
问题内容
我想从我的服务公开以下 url:
get /api/foo
get /api/bar
我还想将其构造为嵌套在另一个路由器中的路由器。顶级路由器将匹配对 /api
的所有请求,并使用嵌套路由器为它们提供服务,该嵌套路由器将匹配对 /foo
和 /bar
的请求。基本上,命名空间。
我可以只有一个路由器,并为两条路由提供 /api
前缀:
router.get("/api/foo", apifoo)
router.get("/api/bar", apibar)
但我希望为 /api
前缀内的所有路由使用单个路由器,以便我可以通过单个函数调用向它们添加适当的中间件。
这是我尝试过的:
package main
import (
"log"
"net/http"
"github.com/julienschmidt/httprouter"
)
func apiFoo(w http.ResponseWriter, r *http.Request) {}
func apiBar(w http.ResponseWriter, r *http.Request) {}
func main() {
api := httprouter.New()
api.HandlerFunc(http.MethodGet, "/foo", apiFoo)
api.HandlerFunc(http.MethodGet, "/bar", apiBar)
router := httprouter.New()
router.Handler(http.MethodGet, "/api", api)
log.Fatal(http.ListenAndServe(":8080", router))
}
但是,访问 http://localhost:8080/api/foo 或 http://localhost:8080/api/bar 时找不到 404
我原以为嵌套路由器会起作用,因为路由器实现了 http.handler
接口。我错过了什么?
解决方法
httprouter 不会连接路径,所以你不能那样做。两个路由器只会检查请求路径并采取相应的行动。
有一个 7 年的公开拉取请求,可以实现它。你可以看看那里并自己实现类似的逻辑,PR 基于连接路径。也许你可以为此编写一个小辅助函数。
如果您愿意切换路由器软件包,您可以考虑替代方案,例如 chi,支持路由器组。
以上就是如何在 Go julienschmidt/httprouter 中嵌套路由器?的详细内容,更多请关注编程网其它相关文章!