package main import ( "fmt" "log" "github.com/gin-gonic/gin" "note-manager/config" "note-manager/handler" "note-manager/repository" "note-manager/router" "note-manager/service" ) func main() { // 加载配置 cfg := config.Load() // 初始化数据库 repo, err := repository.NewNoteRepository(cfg.DBPath) if err != nil { log.Fatalf("初始化数据库失败: %v", err) } // 初始化各层 noteService := service.NewNoteService(repo, cfg.PageSize) noteHandler := handler.NewNoteHandler(noteService) adminHandler := handler.NewAdminHandler(noteService, cfg) imageHandler := handler.NewImageHandler(cfg.UploadDir) // 初始化图片上传目录 if err := imageHandler.Init(); err != nil { log.Fatalf("初始化上传目录失败: %v", err) } // 初始化 Gin(设置模板目录) gin.SetMode(gin.ReleaseMode) engine := gin.Default() // 加载 HTML 模板(使用 Gin 的 LoadHTMLGlob 会自动处理路径) engine.LoadHTMLGlob("./web/admin/*.html") // 加载静态文件服务 engine.Static("/assets", "./web/admin") // 初始化路由 router.Setup(engine, noteHandler, adminHandler, imageHandler, cfg) // 启动服务 addr := fmt.Sprintf(":%s", cfg.Port) log.Printf("云笔记服务启动成功,监听端口 %s", cfg.Port) log.Printf("前台展示: http://localhost%s/", addr) log.Printf("后台管理: http://localhost%s/admin/", addr) log.Printf("图片上传目录: %s", cfg.UploadDir) log.Printf("默认密码: %s", cfg.AdminPass) if err := engine.Run(addr); err != nil { log.Fatalf("启动服务失败: %v", err) } }