// Package router ... // // Description : router ... // // Author : go_developer@163.com<白茶清欢> // // Date : 2025-02-07 18:19 package router import ( "fmt" "net/http" "strings" "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") } return &server{ router: gin.Default(), docInstance: NewDoc(nil, nil), // TODO : 配置相关信息 port: port, } } type server struct { router *gin.Engine port int docInstance *Doc } // Start 启动服务 // // Author : go_developer@163.com<白茶清欢> // // Date : 18:31 2025/2/7 func (s *server) Start() { 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.docInstance.Add(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`) } } } // 注册文档 s.SwaggerUI() } // SwaggerUI ... // // Author : go_developer@163.com<白茶清欢> // // Date : 21:45 2025/2/15 func (s *server) SwaggerUI() { swaggerInstance := NewSwaggerUI(s.docInstance, SwaggerUIThemeDefault) // 默认swagger s.router.GET("/swagger/*any", func(ctx *gin.Context) { if ctx.Request.RequestURI == "/swagger/doc.json" { ctx.JSON(http.StatusOK, swaggerInstance.docInstance.Data()) ctx.Abort() } }, swaggerInstance.HandleSwaggerUI()) }