From e143107de05ce5b8cfbaf230cef3fe9dea5db25e Mon Sep 17 00:00:00 2001 From: serr Date: Sat, 5 Apr 2025 18:31:48 +0300 Subject: [PATCH] new --- main.go | 74 ++++++++++++++++++++++++++++----------------------------- 1 file changed, 37 insertions(+), 37 deletions(-) diff --git a/main.go b/main.go index 8055453..372d956 100644 --- a/main.go +++ b/main.go @@ -21,88 +21,88 @@ sudo systemctl start server.service */ // App представляет основное состояние приложения -type App struct { - Templates *template.Template // Шаблоны страниц - Config *config.Config // Конфиг - StartTime int64 // Время запуска - Cache *cache.Cache // Кэш (отрендеренные странички) +type app struct { + templates *template.Template // Шаблоны страниц + config *config.Config // Конфиг + startTime int64 // Время запуска + cache *cache.Cache // Кэш (отрендеренные странички) } func main() { - var app *App + var app *app var err error // Инициализация приложения - if app, err = AppInit("config.json"); err != nil { + if app, err = appInit("config.json"); err != nil { log.Fatal(err) } // Настройка маршрутов и запуск - if app.SetupRouterAndRun() != nil { + if app.setupRouterAndRun() != nil { log.Fatal(err) } } // Запускает сервер на указанном IP и порту -func RunServer(ip, port string, router http.Handler) { +func runServer(ip, port string, router http.Handler) { addr := ip + port log.Println("Run on", addr) log.Fatal(http.ListenAndServe(addr, router)) } // Инициализирует приложение -func AppInit(configPath string) (*App, error) { +func appInit(configPath string) (*app, error) { - a := &App{ - StartTime: time.Now().Unix(), - Config: config.Init(), - Cache: cache.Init(), + a := &app{ + startTime: time.Now().Unix(), + config: config.Init(), + cache: cache.Init(), } // Загрузка конфига - if err := a.Config.Load(configPath); err != nil { + if err := a.config.Load(configPath); err != nil { return nil, err } // Загрузка шаблонов - if err := a.LoadTemplates(a.Config.TemplatesPath, a.Config.TemplatesExt); err != nil { + if err := a.loadTemplates(a.config.TemplatesPath, a.config.TemplatesExt); err != nil { log.Fatal(err) } return a, nil } -func (a *App) SetupRouterAndRun() error { +func (a *app) setupRouterAndRun() error { // Настройка маршрутов - router := a.SetupRouter() + router := a.setupRouter() // Запуск сервера - if ok, err := tools.IsIPInUse(a.Config.ServerIP); err != nil { + if ok, err := tools.IsIPInUse(a.config.ServerIP); err != nil { return err } else if ok { - RunServer(a.Config.ServerIP, a.Config.Port, router) + runServer(a.config.ServerIP, a.config.Port, router) } else { - RunServer(a.Config.LocalIP, a.Config.Port, router) + runServer(a.config.LocalIP, a.config.Port, router) } return nil } // Настраивает маршруты -func (a *App) SetupRouter() *http.ServeMux { +func (a *app) setupRouter() *http.ServeMux { router := http.NewServeMux() // Обработка статических файлов с кэшированием - router.Handle(a.Config.AssetsPath, a.StaticHandler()) + router.Handle(a.config.AssetsPath, a.staticHandler()) // Обработка главной страницы - router.Handle("/", a.MainPageHandler()) + router.Handle("/", a.mainPageHandler()) return router } // Обработчик статических файлов с кэшированием -func (a *App) StaticHandler() http.HandlerFunc { +func (a *app) staticHandler() http.HandlerFunc { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { w.Header().Add("Cache-Control", "public, max-age=31536000, immutable") // Здесь используется встроенный файловый сервер Go (http.FileServer), который: @@ -114,32 +114,32 @@ func (a *App) StaticHandler() http.HandlerFunc { } // Обработчик главной страницы -func (a *App) MainPageHandler() http.HandlerFunc { +func (a *app) mainPageHandler() http.HandlerFunc { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { var err error - tmplName := "main" + a.Config.TemplatesExt + tmplName := "main" + a.config.TemplatesExt // Страничка рендерится только если ее нет в кэше - pageData, ok := a.Cache.Get(tmplName) + pageData, ok := a.cache.Get(tmplName) if !ok { context := map[string]any{ - "version": a.StartTime, + "version": a.startTime, "renderingTimestamp": time.Now().Unix(), } - pageData, err = a.RenderPage(tmplName, context) + pageData, err = a.renderPage(tmplName, context) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } - a.Cache.Set(tmplName, pageData) + a.cache.Set(tmplName, pageData) } - a.SendPage(w, pageData.([]byte)) + a.sendPage(w, pageData.([]byte)) }) } // Загрузка шаблонов -func (a *App) LoadTemplates(templatesPath string, ext string) error { +func (a *app) loadTemplates(templatesPath string, ext string) error { tmpls := template.New("") err := filepath.Walk(templatesPath, func(path string, f os.FileInfo, err error) error { @@ -159,15 +159,15 @@ func (a *App) LoadTemplates(templatesPath string, ext string) error { return err } - a.Templates = tmpls + a.templates = tmpls return nil } // Рендерит шаблон в срез байт -func (a *App) RenderPage(tmplName string, context any) ([]byte, error) { +func (a *app) renderPage(tmplName string, context any) ([]byte, error) { var pageData bytes.Buffer - if err := a.Templates.ExecuteTemplate(&pageData, tmplName, context); err != nil { + if err := a.templates.ExecuteTemplate(&pageData, tmplName, context); err != nil { return nil, err } @@ -175,7 +175,7 @@ func (a *App) RenderPage(tmplName string, context any) ([]byte, error) { } // Отправляет страницу -func (a *App) SendPage(w http.ResponseWriter, data []byte) { +func (a *app) sendPage(w http.ResponseWriter, data []byte) { w.Header().Set("Content-Type", "text/html; charset=utf-8") w.WriteHeader(http.StatusOK) w.Write(data)