通过范型功能,可以很方便地实现一个自定义的路由:
typeContextstruct{R*http.RequestWhttp.ResponseWriterPParams}typeHandlerFuncfunc(ctx*Context)typeRouter=RouterOf[HandlerFunc]typePrefix=PrefixOf[HandlerFunc]typeResource=ResourceOf[HandlerFunc]typeMiddlewareFunc=MiddlewareFuncOf[HandlerFunc]typeMiddleware=MiddlewareOf[HandlerFunc]typeOptions=OptionsOf[HandlerFunc]funcNew(namestring,ms[]Middleware,o...Option)*Router{f:=func(whttp.ResponseWriter,r*http.Request,psParams,hHandlerFunc){ctx:=&Context{R:r,W:w,P:ps,}h(ctx)}returnNewRouterOf[HandlerFunc](name,f,ms,o...)}//以上就是自定义路由的全部功能,之后就可以直接使用:r:=New("router",nil)r.Get("/path",func(ctx*Context){//TODOctx.W.WriteHeader(200)})r.Prefix("/admin").Get("/login",func(ctx*Context){//TODOctx.W.WriteHeader(501)})所有实现的路由,都支持以下功能:
路由参数;支持正则表达式作为路由项匹配方式;拦截正则表达式的行为;自动生成OPTIONS请求处理方式;自动生成HEAD请求处理方式;根据路由反向生成地址;任意风格的路由,比如discuz这种不以/作为分隔符的;分组路由,比如按域名,或是版本号等;CORS跨域资源的处理;支持中间件;自动生成OPTIONS*请求;静态文件系统;TRACE请求方法的支持;panic处理;
评论