123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- package linker
-
- import (
- "hash/crc32"
- "strconv"
- )
-
- type (
- Router struct {
- prefix string
- handlerContainer map[uint32]Handler
- routerMiddleware map[uint32][]Middleware
- middleware []Middleware
- }
-
- LinkRouter func(*Router)
- )
-
- func NewRouter() *Router {
- return &Router{
- handlerContainer: make(map[uint32]Handler),
- routerMiddleware: make(map[uint32][]Middleware),
- }
- }
-
- // 获取带命名空间router
- func (r *Router) NSRouter(prefix string, params ...LinkRouter) *Router {
- r.prefix = prefix
- for _, p := range params {
- p(r)
- }
-
- return r
- }
-
- // 命名空间路由注册路由和中间件
- func (r *Router) NSRoute(pattern string, handler Handler, middleware ...Middleware) LinkRouter {
- return func(r *Router) {
- if r.prefix != "" {
- pattern = r.prefix + pattern
- }
-
- r.Route(pattern, handler, middleware...)
- }
- }
-
- // 注册路由,路由中间件
- func (r *Router) Route(pattern string, handler Handler, middleware ...Middleware) *Router {
- operator := crc32.ChecksumIEEE([]byte(pattern))
- if operator <= OPERATOR_MAX {
- panic("Unavailable operator, the value of crc32 need less than " + strconv.Itoa(OPERATOR_MAX))
- }
-
- r.routerMiddleware[operator] = append(r.routerMiddleware[operator], middleware...)
-
- if _, ok := r.handlerContainer[operator]; !ok {
- r.handlerContainer[operator] = handler
- }
-
- return r
- }
-
- // 添加请求需要进行处理的中间件
- func (r *Router) Use(middleware ...Middleware) *Router {
- r.middleware = append(r.middleware, middleware...)
-
- return r
- }
|