BunRouter用于 Go 的快速灵活的 HTTP 路由器
BunRouter 是一个用于 Go 的极快的 HTTP 路由器,具有独特的功能组合:
- 中间件允许将 HTTP 处理程序中的常见操作提取到可重用的函数中。
- 错误处理允许通过处理中间件中的错误来进一步减小 HTTP 处理程序的大小。
- 路由优先 级为路由规则启用有意义的匹配优先级:首先是静态节点,然后是命名节点,最后是通配符节点。
- net/http 兼容 API,这意味着使用最少的 API,而无需构建试图做所有事情的巨大包装器:从提供静态文件到 XML 生成(例如,
gin.Context
或echo.Context
)。
package main import ( "html/template" "log" "net/http" "github.com/uptrace/bunrouter" "github.com/uptrace/bunrouter/extra/reqlog" ) func main() { router := bunrouter.New( bunrouter.WithMiddleware(reqlog.NewMiddleware()), ) router.GET("/", indexHandler) router.WithGroup("/api", func(g *bunrouter.Group) { g.GET("/users/:id", debugHandler) g.GET("/users/current", debugHandler) g.GET("/users/*path", debugHandler) }) log.Println("listening on http://localhost:9999") log.Println(http.ListenAndServe(":9999", router)) } func indexHandler(w http.ResponseWriter, req bunrouter.Request) error { return indexTemplate().Execute(w, nil) } func debugHandler(w http.ResponseWriter, req bunrouter.Request) error { return bunrouter.JSON(w, bunrouter.H{ "route": req.Route(), "params": req.Params().Map(), }) } var indexTmpl = ` <html> <h1>Welcome</h1> <ul> <li><a href="/api/users/123">/api/users/123</a></li> <li><a href="/api/users/current">/api/users/current</a></li> <li><a href="/api/users/foo/bar">/api/users/foo/bar</a></li> </ul> </html> ` func indexTemplate() *template.Template { return template.Must(template.New("index").Parse(indexTmpl)) }
评论