mirror of
https://github.com/gin-gonic/gin.git
synced 2025-10-17 05:42:09 +08:00
feat: Added OptionFunc
and With
This commit is contained in:
parent
a889c58de7
commit
8f70ecb911
21
gin.go
21
gin.go
@ -47,6 +47,9 @@ var regRemoveRepeatedChar = regexp.MustCompile("/{2,}")
|
|||||||
// HandlerFunc defines the handler used by gin middleware as return value.
|
// HandlerFunc defines the handler used by gin middleware as return value.
|
||||||
type HandlerFunc func(*Context)
|
type HandlerFunc func(*Context)
|
||||||
|
|
||||||
|
// OptionFunc defines the function to change the default configuration
|
||||||
|
type OptionFunc func(*Engine)
|
||||||
|
|
||||||
// HandlersChain defines a HandlerFunc slice.
|
// HandlersChain defines a HandlerFunc slice.
|
||||||
type HandlersChain []HandlerFunc
|
type HandlersChain []HandlerFunc
|
||||||
|
|
||||||
@ -180,7 +183,7 @@ var _ IRouter = (*Engine)(nil)
|
|||||||
// - ForwardedByClientIP: true
|
// - ForwardedByClientIP: true
|
||||||
// - UseRawPath: false
|
// - UseRawPath: false
|
||||||
// - UnescapePathValues: true
|
// - UnescapePathValues: true
|
||||||
func New() *Engine {
|
func New(opts ...OptionFunc) *Engine {
|
||||||
debugPrintWARNINGNew()
|
debugPrintWARNINGNew()
|
||||||
engine := &Engine{
|
engine := &Engine{
|
||||||
RouterGroup: RouterGroup{
|
RouterGroup: RouterGroup{
|
||||||
@ -209,13 +212,16 @@ func New() *Engine {
|
|||||||
engine.pool.New = func() any {
|
engine.pool.New = func() any {
|
||||||
return engine.allocateContext(engine.maxParams)
|
return engine.allocateContext(engine.maxParams)
|
||||||
}
|
}
|
||||||
|
for _, opt := range opts {
|
||||||
|
opt(engine)
|
||||||
|
}
|
||||||
return engine
|
return engine
|
||||||
}
|
}
|
||||||
|
|
||||||
// Default returns an Engine instance with the Logger and Recovery middleware already attached.
|
// Default returns an Engine instance with the Logger and Recovery middleware already attached.
|
||||||
func Default() *Engine {
|
func Default(opts ...OptionFunc) *Engine {
|
||||||
debugPrintWARNINGDefault()
|
debugPrintWARNINGDefault()
|
||||||
engine := New()
|
engine := New(opts...)
|
||||||
engine.Use(Logger(), Recovery())
|
engine.Use(Logger(), Recovery())
|
||||||
return engine
|
return engine
|
||||||
}
|
}
|
||||||
@ -311,6 +317,15 @@ func (engine *Engine) Use(middleware ...HandlerFunc) IRoutes {
|
|||||||
return engine
|
return engine
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// With returns a new Engine instance with the provided options.
|
||||||
|
func (engine *Engine) With(opts ...OptionFunc) *Engine {
|
||||||
|
for _, opt := range opts {
|
||||||
|
opt(engine)
|
||||||
|
}
|
||||||
|
|
||||||
|
return engine
|
||||||
|
}
|
||||||
|
|
||||||
func (engine *Engine) rebuild404Handlers() {
|
func (engine *Engine) rebuild404Handlers() {
|
||||||
engine.allNoRoute = engine.combineHandlers(engine.noRoute)
|
engine.allNoRoute = engine.combineHandlers(engine.noRoute)
|
||||||
}
|
}
|
||||||
|
34
gin_test.go
34
gin_test.go
@ -696,3 +696,37 @@ func assertRoutePresent(t *testing.T, gotRoutes RoutesInfo, wantRoute RouteInfo)
|
|||||||
|
|
||||||
func handlerTest1(c *Context) {}
|
func handlerTest1(c *Context) {}
|
||||||
func handlerTest2(c *Context) {}
|
func handlerTest2(c *Context) {}
|
||||||
|
|
||||||
|
func TestNewOptionFunc(t *testing.T) {
|
||||||
|
var fc = func(e *Engine) {
|
||||||
|
e.GET("/test1", handlerTest1)
|
||||||
|
e.GET("/test2", handlerTest2)
|
||||||
|
|
||||||
|
e.Use(func(c *Context) {
|
||||||
|
c.Next()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
r := New(fc)
|
||||||
|
|
||||||
|
routes := r.Routes()
|
||||||
|
assertRoutePresent(t, routes, RouteInfo{Path: "/test1", Method: "GET", Handler: "github.com/gin-gonic/gin.handlerTest1"})
|
||||||
|
assertRoutePresent(t, routes, RouteInfo{Path: "/test2", Method: "GET", Handler: "github.com/gin-gonic/gin.handlerTest2"})
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestWithOptionFunc(t *testing.T) {
|
||||||
|
r := New()
|
||||||
|
|
||||||
|
r.With(func(e *Engine) {
|
||||||
|
e.GET("/test1", handlerTest1)
|
||||||
|
e.GET("/test2", handlerTest2)
|
||||||
|
|
||||||
|
e.Use(func(c *Context) {
|
||||||
|
c.Next()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
routes := r.Routes()
|
||||||
|
assertRoutePresent(t, routes, RouteInfo{Path: "/test1", Method: "GET", Handler: "github.com/gin-gonic/gin.handlerTest1"})
|
||||||
|
assertRoutePresent(t, routes, RouteInfo{Path: "/test2", Method: "GET", Handler: "github.com/gin-gonic/gin.handlerTest2"})
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user