main.go 1.2 KB

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