/* server.go - HTTP服务器核心 实现了HTTP服务器的基本功能和生命周期管理 */ package server import ( "context" "fmt" "net/http" "time" ) // Server HTTP服务器结构体 type Server struct { httpServer *http.Server router *Router addr string } // NewServer 创建新的服务器实例 func NewServer(addr string) *Server { router := NewRouter() return &Server{ httpServer: &http.Server{ Addr: addr, Handler: router, ReadTimeout: 15 * time.Second, WriteTimeout: 15 * time.Second, IdleTimeout: 60 * time.Second, }, router: router, addr: addr, } } // SetupRoutes 设置路由 func (s *Server) SetupRoutes() { // 添加中间件 s.router.Use(LoggingMiddleware) s.router.Use(CORSMiddleware) s.router.Use(RecoveryMiddleware) // 静态文件服务 s.router.HandleFunc("/", HomeHandler).Methods("GET") s.router.PathPrefix("/static/").Handler( http.StripPrefix("/static/", http.FileServer(http.Dir("./static/"))), ) // 健康检查 s.router.HandleFunc("/health", HealthHandler).Methods("GET") // API路由 apiRouter := s.router.PathPrefix("/api").Subrouter() // 用户管理API apiRouter.HandleFunc("/users", GetUsersHandler).Methods("GET") apiRouter.HandleFunc("/users", CreateUserHandler).Methods("POST") apiRouter.HandleFunc("/users/{id:[0-9]+}", GetUserHandler).Methods("GET") apiRouter.HandleFunc("/users/{id:[0-9]+}", UpdateUserHandler).Methods("PUT") apiRouter.HandleFunc("/users/{id:[0-9]+}", DeleteUserHandler).Methods("DELETE") // 服务器统计 apiRouter.HandleFunc("/stats", StatsHandler).Methods("GET") // API文档 apiRouter.HandleFunc("", APIDocHandler).Methods("GET") } // Start 启动服务器 func (s *Server) Start() error { fmt.Printf("✅ 服务器启动成功,监听地址: %s\n", s.addr) return s.httpServer.ListenAndServe() } // Shutdown 优雅关闭服务器 func (s *Server) Shutdown() error { ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) defer cancel() return s.httpServer.Shutdown(ctx) } // GetRouter 获取路由器 func (s *Server) GetRouter() *Router { return s.router } // GetHTTPServer 获取HTTP服务器 func (s *Server) GetHTTPServer() *http.Server { return s.httpServer }