在我的项目中咱们很多时候会对一组的路由进行解决,咱们应该如何实现这个性能呢。目前来说,咱们进行的都是单个路由的解决。

分组的实现

明天的内容不是很多,咱们对router文件进行改在。
在分组的时候,给每个组要用本人的中间件,也就是共有的中间件,所以咱们首先实现一个构造体

type RouterGroup struct {    prefix      string    middlewares []HandlerFunc // support middleware    parent      *RouterGroup  // support nesting    engine      *Engine       // all groups share a Engine instance}

而后engine要实现所以的性能,所以咱们要进行一个革新:

func New() *Engine {    engine := &Engine{router: newRouter()}    engine.RouterGroup = &RouterGroup{engine: engine}    engine.groups = []*RouterGroup{engine.RouterGroup}    return engine}

而后上面是咱们是咱们总体的代码:

package geeimport (    "log"    "net/http")type RouterGroup struct {    prefix      string    middlewares []HandlerFunc // support middleware    parent      *RouterGroup  // support nesting    engine      *Engine       // all groups share a Engine instance}// HandlerFunc defines the request handler used by geetype HandlerFunc func(*Context)// Engine implement the interface of ServeHTTPtype Engine struct {    *RouterGroup    router *router    groups []*RouterGroup // store all groups}// New is the constructor of gee.Enginefunc New() *Engine {    engine := &Engine{router: newRouter()}    engine.RouterGroup = &RouterGroup{engine: engine}    engine.groups = []*RouterGroup{engine.RouterGroup}    return engine}// Group is defined to create a new RouterGroup// remember all groups share the same Engine instancefunc (group *RouterGroup) Group(prefix string) *RouterGroup {    engine := group.engine    newGroup := &RouterGroup{        prefix: group.prefix + prefix,        parent: group,        engine: engine,    }    engine.groups = append(engine.groups, newGroup)    return newGroup}func (group *RouterGroup) addRoute(method string, comp string, handler HandlerFunc) {    pattern := group.prefix + comp    log.Printf("Route %4s - %s", method, pattern)    group.engine.router.addRoute(method, pattern, handler)}// GET defines the method to add GET requestfunc (group *RouterGroup) GET(pattern string, handler HandlerFunc) {    group.addRoute("GET", pattern, handler)}// POST defines the method to add POST requestfunc (group *RouterGroup) POST(pattern string, handler HandlerFunc) {    group.addRoute("POST", pattern, handler)}// Run defines the method to start a http serverfunc (engine *Engine) Run(addr string) (err error) {    return http.ListenAndServe(addr, engine)}//这里就是最初的处理函数,这里开始建设的上下文。func (engine *Engine) ServeHTTP(w http.ResponseWriter, req *http.Request) {    c := newContext(w, req)    engine.router.handle(c)}