package main import ( "context" "fmt" "log" "net/http" "os" "os/signal" "time" "surveyService/cache" "surveyService/model" "surveyService/router" "surveyService/util/validator" "github.com/joho/godotenv" "gogs.uu.mdfitnesscao.com/hys/sdk" ) func main() { // 加载dotEnv环境 loadEnvErr := godotenv.Load() if loadEnvErr != nil { fmt.Println("ENV环境加载Error") return } // 开始初始化数据库 model.Construct(true) // 开始初始化缓存 cache.InitRedis() // 初始化校验器翻译 validator.Init() router := router.Init() sdk.InitConfig(&sdk.ClientConfig{ ApiDomain: os.Getenv("API_DOMAIN"), AppDebug: os.Getenv("APP_DEBUG") == "true", }) srv := &http.Server{ Addr: ":" + os.Getenv("HTTP_PORT"), Handler: router, } go func() { // 服务连接 if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed { log.Fatalf("服务开启失败: %s\n", err) } }() // 等待中断信号以优雅地关闭服务器(设置 5 秒的超时时间) quit := make(chan os.Signal) signal.Notify(quit, os.Interrupt) <-quit log.Println("服务关闭中..") ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() if err := srv.Shutdown(ctx); err != nil { log.Fatal("服务关闭异常:", err) } log.Println("服务已退出") }