main.go 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. package main
  2. import (
  3. "context"
  4. "log/slog"
  5. "os"
  6. "github.com/gin-gonic/gin"
  7. "github.com/kairo/haven/internal/config"
  8. "github.com/kairo/haven/internal/db"
  9. )
  10. // main 是后端入口。
  11. //
  12. // 配置全部来自环境变量,见 docs/architecture.md 第四节;
  13. // 本期只完成启动骨架:读取配置、初始化日志、注册健康检查。
  14. // 数据库连接、鉴权中间件与各领域路由按 TODO.md 后续条目接入。
  15. func main() {
  16. if err := run(); err != nil {
  17. slog.Error("服务启动失败", "err", err)
  18. os.Exit(1)
  19. }
  20. }
  21. func run() error {
  22. cfg, err := config.Load()
  23. if err != nil {
  24. return err
  25. }
  26. logger := newLogger(cfg.LogLevel)
  27. slog.SetDefault(logger)
  28. conn, err := db.Open(context.Background(), cfg.DBDSN)
  29. if err != nil {
  30. return err
  31. }
  32. defer conn.Close()
  33. logger.Info("数据库连接就绪")
  34. gin.SetMode(gin.ReleaseMode)
  35. r := gin.New()
  36. r.Use(gin.Recovery())
  37. r.GET("/api/health", func(c *gin.Context) {
  38. c.JSON(200, gin.H{"status": "ok"})
  39. })
  40. logger.Info("后端启动", "listen_addr", cfg.ListenAddr)
  41. return r.Run(cfg.ListenAddr)
  42. }
苏ICP备2026082406号
苏公网安备 待审核