main.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. package main
  2. import (
  3. "context"
  4. "fmt"
  5. "log"
  6. "net/http"
  7. "os"
  8. "os/signal"
  9. "time"
  10. "surveyService/cache"
  11. "surveyService/model"
  12. "surveyService/router"
  13. "surveyService/util/validator"
  14. "github.com/joho/godotenv"
  15. "gogs.uu.mdfitnesscao.com/cuiguohai/sdk"
  16. )
  17. func main() {
  18. // 加载dotEnv环境
  19. loadEnvErr := godotenv.Load()
  20. if loadEnvErr != nil {
  21. fmt.Println("ENV环境加载Error")
  22. return
  23. }
  24. // 开始初始化数据库
  25. model.Construct(true)
  26. // 开始初始化缓存
  27. cache.InitRedis()
  28. // 初始化校验器翻译
  29. validator.Init()
  30. router := router.Init()
  31. sdk.InitConfig(&sdk.ClientConfig{
  32. ApiDomain: os.Getenv("API_DOMAIN"),
  33. AppDebug: os.Getenv("APP_DEBUG") == "true",
  34. })
  35. srv := &http.Server{
  36. Addr: ":" + os.Getenv("HTTP_PORT"),
  37. Handler: router,
  38. }
  39. go func() {
  40. // 服务连接
  41. if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed {
  42. log.Fatalf("服务开启失败: %s\n", err)
  43. }
  44. }()
  45. // 等待中断信号以优雅地关闭服务器(设置 5 秒的超时时间)
  46. quit := make(chan os.Signal)
  47. signal.Notify(quit, os.Interrupt)
  48. <-quit
  49. log.Println("服务关闭中..")
  50. ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
  51. defer cancel()
  52. if err := srv.Shutdown(ctx); err != nil {
  53. log.Fatal("服务关闭异常:", err)
  54. }
  55. log.Println("服务已退出")
  56. }