// Package router ... // // Description : router ... // // Author : go_developer@163.com<白茶清欢> // // Date : 2025-02-07 18:19 package router import ( "fmt" apiDoc "git.zhangdeman.cn/gateway/api-doc" "git.zhangdeman.cn/zhangdeman/gin/middleware" "net/http" "strings" apiDocDefine "git.zhangdeman.cn/gateway/api-doc/define" "github.com/gin-gonic/gin" ) // NewServer server实例 // // Author : go_developer@163.com<白茶清欢> // // Date : 18:20 2025/2/7 func NewServer(port int, option any) *server { if port < 80 { panic("port should be greater than 80") } r := gin.Default() r.Use( // 初始化请求 middleware.InitRequest(), /*request_cors.New(request_cors.Config{ AllowAllOrigins: true, }), */// middleware.Ac ) return &server{ router: r, uiInstance: apiDoc.NewSwaggerUI(nil, []*apiDocDefine.ServerItem{ { Url: fmt.Sprintf("http://127.0.0.1:%d", port), Description: "测试服务器", }, }, apiDocDefine.SwaggerUIThemeKnife4go), // TODO : 配置相关信息 port: port, } } type server struct { router *gin.Engine port int uiInstance *apiDoc.SwaggerUI } // Start 启动服务 // // Author : go_developer@163.com<白茶清欢> // // Date : 18:31 2025/2/7 func (s *server) Start() { // 注册文档 s.uiInstance.RegisterHandler(s.router, "/doc/swagger") if err := s.router.Run(fmt.Sprintf(":%d", s.port)); err != nil { panic("服务启动监听失败" + err.Error()) } } // Group 注册接口路由 // // Author : go_developer@163.com<白茶清欢> // // Date : 19:35 2025/1/27 func (s *server) Group(routerPrefix string, middlewareList []gin.HandlerFunc, cList ...any) { g := s.router.Group(routerPrefix) g.Use(middlewareList...) cParser := controller{} for _, c := range cList { urlTable := cParser.Parse(c) for _, itemUriCfg := range urlTable { _ = s.uiInstance.DocInstance().AddApiFromInAndOut(routerPrefix, itemUriCfg.FormDataType, itemUriCfg.ResultDataType) method := strings.ToUpper(itemUriCfg.RequestMethod) switch method { case http.MethodGet: g.GET(itemUriCfg.Path, RequestHandler(itemUriCfg)) case http.MethodHead: g.HEAD(itemUriCfg.Path, RequestHandler(itemUriCfg)) case http.MethodPost: g.POST(itemUriCfg.Path, RequestHandler(itemUriCfg)) case http.MethodPut: g.PUT(itemUriCfg.Path, RequestHandler(itemUriCfg)) case http.MethodPatch: g.PATCH(itemUriCfg.Path, RequestHandler(itemUriCfg)) case http.MethodDelete: g.DELETE(itemUriCfg.Path, RequestHandler(itemUriCfg)) case http.MethodOptions: g.OPTIONS(itemUriCfg.Path, RequestHandler(itemUriCfg)) case http.MethodTrace: panic(`method Trace is not supported`) default: panic("method " + itemUriCfg.RequestMethod + " is not support") } } } }