code: func New(ctx interface{}) *Router {
  	validateContext(ctx, nil)
  
  	r := &Router{}
  	r.contextType = reflect.TypeOf(ctx)
  	r.pathPrefix = "/"
  	r.maxChildrenDepth = 1
  	r.root = make(map[httpMethod]*pathNode)
  	for _, method := range httpMethods {
  		r.root[method] = newPathNode()
  	}
  	return r
  }
docs: // New returns a new router with context type ctx. ctx should be a struct instance,
  // whose purpose is to communicate type information. On each request, an instance of this
  // context type will be automatically allocated and sent to handlers.