package app import ( "encoding/json" "github.com/gofiber/fiber/v2" "github.com/spf13/viper" "matrix-middle-service/internel/route" "matrix-middle-service/pkg/config" "matrix-middle-service/pkg/logger" "time" ) var app *fiber.App var conf = new(config.Conf) func CreateApp(c *config.Conf) *fiber.App { return fiber.New(fiber.Config{ JSONEncoder: json.Marshal, JSONDecoder: json.Unmarshal, Prefork: c.Server.PreFork, CaseSensitive: c.Server.CaseSensitive, StrictRouting: c.Server.StrictRouting, ServerHeader: c.Server.ServerHeader, ErrorHandler: GlobalErrorHandler(), }) } func Run() { err := viper.Unmarshal(conf) if err != nil { logger.Log().Fatalf("配置文件解析失败: %s, 请检查配置是否有误", err) } Shutdown() app = CreateApp(conf) route.SetupRoute(app) app.Hooks().OnListen(func() error { logger.MLog("[√] [服务启动完成]") return nil }) if err := app.Listen(conf.Server.Addr); err != nil { logger.Log().Fatalf("[x] [Fiber] 致命错误: %s", err) } } func Shutdown() { if app == nil { return } logger.Log().Infof("关闭服务") timeout := 5 * time.Second err := app.ShutdownWithTimeout(timeout) if err != nil { logger.Log().Fatal(err) } }