1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- package boots
- import (
- "context"
- "fmt"
- "go-nc/configs/global"
- "go-nc/internal/utils"
- "log"
- "net/http"
- "os"
- "os/signal"
- "syscall"
- "time"
- "go-nc/internal/middleware"
- "github.com/gin-gonic/gin"
- routes "go-nc/internal/router"
- )
- // 初始化路由
- func setupRouter() *gin.Engine {
- // 初始化 Gin 引擎,并设置调试模式为 false
- gin.SetMode(gin.ReleaseMode)
- // 创建一个 Gin 路由实例
- router := gin.Default()
- // 加载中间件: recover
- router.Use(middleware.Recover)
- // 加载中间件:使用统一响应中间件
- router.Use(middleware.UnifiedResponseMiddleware())
- // 设置静态文件路径
- router.Static("static", "./public")
- // 注册 api 分组路由
- apiGroup := router.Group("/", middleware.JwtAuth())
- // 设置 api 分组路由
- routes.SetApiGroupRoutes(apiGroup)
- return router
- }
- // 运行服务
- func RunServer() {
- // 初始化路由
- r := setupRouter()
- // 创建一个 HTTP 服务器实例
- srv := &http.Server{
- Addr: ":" + global.App.Config.App.Port,
- Handler: r,
- }
- go func() {
- if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed {
- log.Fatalf("listen: %s\n", err)
- }
- }()
- // 等待中断信号以优雅地关闭服务器, 设置 1 个缓冲区
- quit := make(chan os.Signal, 1)
- // 通知 quit 通道接收信号
- signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
- fmt.Print("\n\x1b[32m http://" + utils.GetLocalIP() + ":" + global.App.Config.App.Port + "\x1b[0m \n")
- // 等待信号
- <-quit
- log.Println("服务器正在退出...")
- // 设置 5 秒的超时时间
- ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
- defer cancel()
- // 优雅地关闭服务器
- if err := srv.Shutdown(ctx); err != nil {
- log.Fatal("服务器退出失败:", err)
- }
- log.Println("服务器退出成功~")
- }
|