package web import ( "net/http" g "platform/web/globals" "runtime" "log/slog" "github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2/middleware/logger" "github.com/gofiber/fiber/v2/middleware/requestid" "github.com/google/uuid" "github.com/jxskiss/base62" _ "net/http/pprof" ) type Config struct { Listen string } type Server struct { config *Config fiber *fiber.App } func New(config *Config) (*Server, error) { _config := config if config == nil { _config = &Config{} } return &Server{ config: _config, }, nil } func (s *Server) Run() error { // inits g.InitBaiyin() g.InitAlipay() // g.InitWechatPay() g.InitAliyun() g.InitValidator() // config s.fiber = fiber.New(fiber.Config{ ProxyHeader: fiber.HeaderXForwardedFor, ErrorHandler: ErrorHandler, }) s.fiber.Use(requestid.New(requestid.Config{ Generator: func() string { binary, _ := uuid.New().MarshalBinary() return base62.EncodeToString(binary) }, })) s.fiber.Use(logger.New(logger.Config{ Format: "🚀 ${time} | ${locals:authtype} ${locals:authid} | ${method} ${path} | ${status} | ${latency} | ${error}\n", TimeFormat: "2006-01-02 15:04:05", TimeZone: "Asia/Shanghai", })) ApplyRouters(s.fiber) // pprof go func() { runtime.SetBlockProfileRate(1) err := http.ListenAndServe(":6060", nil) if err != nil { slog.Error("pprof 服务错误", slog.Any("err", err)) } }() // listen slog.Info("Server started on :8080") err := s.fiber.Listen(":8080") if err != nil { slog.Error("Failed to start server", slog.Any("err", err)) } slog.Info("Server stopped") return nil } func (s *Server) Stop() { err := s.fiber.Shutdown() if err != nil { slog.Error("Failed to shutdown server", slog.Any("err", err)) } }