code: func (rootRouter *Router) ServeHTTP(rw http.ResponseWriter, r *http.Request) {
  
  	// Manually create a closure. These variables are needed in middlewareStack.
  	// The reason we put these here instead of in the middleware stack, is Go (as of 1.2)
  	// creates a heap variable for each varaiable in the closure. To minimize that, we'll
  	// just have one (closure *middlewareClosure).
  	var closure middlewareClosure
  	closure.Request.Request = r
  	closure.appResponseWriter.ResponseWriter = rw
  	closure.Routers = make([]*Router, 1, rootRouter.maxChildrenDepth)
  	closure.Routers[0] = rootRouter
  	closure.Contexts = make([]reflect.Value, 1, rootRouter.maxChildrenDepth)
  	closure.Contexts[0] = reflect.New(rootRouter.contextType)
  	closure.currentMiddlewareLen = len(rootRouter.middleware)
  	closure.RootRouter = rootRouter
  	closure.Request.rootContext = closure.Contexts[0]
  
  	// Handle errors
  	defer func() {
  		if recovered := recover(); recovered != nil {
  			rootRouter.handlePanic(&closure.appResponseWriter, &closure.Request, recovered)
  		}
  	}()
  
  	next := middlewareStack(&closure)
  	next(&closure.appResponseWriter, &closure.Request)
  }
docs: // This is the entry point for servering all requests.