func New() *Engine {
	debugPrintWARNINGNew()
	engine := &Engine{
		RouterGroup: RouterGroup{
			Handlers: nil,
			basePath: "/",
			root:     true,
		},
		FuncMap:                template.FuncMap{},
		RedirectTrailingSlash:  true,
		RedirectFixedPath:      false,
		HandleMethodNotAllowed: false,
		ForwardedByClientIP:    true,
		AppEngine:              defaultAppEngine,
		UseRawPath:             false,
		UnescapePathValues:     true,
		trees:                  make(methodTrees, 0, 9),
		delims:                 render.Delims{"{{", "}}"},
	}
	engine.RouterGroup.engine = engine
	engine.pool.New = func() interface{} {
		return engine.allocateContext()
	}
	return engine
}
New returns a new blank Engine instance without any middleware attached.
By default the configuration is:
- RedirectTrailingSlash:  true
- RedirectFixedPath:      false
- HandleMethodNotAllowed: false
- ForwardedByClientIP:    true
- UseRawPath:             false
- UnescapePathValues:     true
package gin
import (
	"html/template"
	"net"
	"net/http"
	"os"
	"sync"
	"github.com/gin-gonic/gin/render"
)
const Version = "v1.2"
var default404Body = []byte("404 page not found")
var default405Body = []byte("405 method not allowed")
var defaultAppEngine bool
type HandlerFunc func(*Context)
type HandlersChain []HandlerFunc
func (c HandlersChain) Last() HandlerFunc {
	length := len(c)
	if length > 0 {
		return c[length-1]
	}
	return nil
}
type (
	RoutesInfo []RouteInfo
	RouteInfo  struct {
		Method  string
		Path    string
		Handler string
	}
	Engine struct {
		RouterGroup
		delims      render.Delims
		HTMLRender  render.HTMLRender
		FuncMap     template.FuncMap
		allNoRoute  HandlersChain
		allNoMethod HandlersChain
		noRoute     HandlersChain
		noMethod    HandlersChain
		pool        sync.Pool
		trees       methodTrees
		RedirectTrailingSlash bool
		RedirectFixedPath bool
		HandleMethodNotAllowed bool
		ForwardedByClientIP    bool
		AppEngine bool
		UseRawPath bool
		UnescapePathValues bool
	}
)
var _ IRouter = &Engine{}