small changes

master
serr 2025-03-27 14:44:56 +03:00
parent a1d7d00963
commit a95f922155
1 changed files with 60 additions and 57 deletions

117
main.go
View File

@ -12,90 +12,96 @@ import (
"time"
)
var (
// App представляет основное состояние приложения
type App struct {
templates *template.Template
startTime int64
)
}
func main() {
// Инициализация приложения
app := AppInit()
// Загрузка шаблонов
tmpls, err := loadTemplates(cfg.TemplatesPath, cfg.TemplatesExt)
if err != nil {
if err := app.loadTemplates(cfg.TemplatesPath, cfg.TemplatesExt); err != nil {
log.Fatal(err)
}
// Настройка маршрутов
setupRoutes(tmpls)
router := app.setupRouter()
// Запуск сервера
log.Println("Run on", cfg.ServerAddr)
startTime = time.Now().Unix()
log.Fatal(http.ListenAndServe(cfg.ServerAddr, nil))
log.Fatal(http.ListenAndServe(cfg.ServerAddr, router))
}
func setupRoutes(tmpls *template.Template) {
// Статика
{
fs := http.FileServer(http.Dir("assets"))
http.Handle("/assets/", http.StripPrefix("/assets/", fs))
// Инициализирует приложение
func AppInit() *App {
return &App{
startTime: time.Now().Unix(),
}
// Странички
{
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
tmplName := "main.html"
context := map[string]any{
"timestamp": startTime,
}
if pageData, err := renderPage(tmpls, tmplName, context); err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
} else {
sendPage(w, pageData)
}
})
}
}
// Загрузка шаблонов, создание хранилища шаблонов
func loadTemplates(
templatesPath string,
ext string) (*template.Template, error) {
// Настраивает маршруты
func (a *App) setupRouter() *http.ServeMux {
router := http.NewServeMux()
// Обработка статических файлов
fs := http.FileServer(http.Dir("assets"))
router.Handle("/assets/", http.StripPrefix("/assets/", fs))
// Обработка главной страницы
router.HandleFunc("/", a.handleMainPage)
return router
}
// Обработчик главной страницы
func (a *App) handleMainPage(w http.ResponseWriter, r *http.Request) {
tmplName := "main.html"
context := map[string]any{
"timestamp": a.startTime,
}
pageData, err := a.renderPage(tmplName, context)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
a.sendPage(w, pageData)
}
// Загрузка шаблонов
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 {
err := filepath.Walk(templatesPath, func(path string, f os.FileInfo, err error) error {
if err != nil {
return err
}
if !f.IsDir() && strings.HasSuffix(f.Name(), ext) {
_, err = tmpls.ParseFiles(path)
if err != nil {
return err
}
if !f.IsDir() && strings.HasSuffix(f.Name(), ext) {
_, err = tmpls.ParseFiles(path)
if err != nil {
return err
}
}
return nil
})
}
return nil
})
if err != nil {
return nil, err
return err
}
return tmpls, nil
a.templates = tmpls
return nil
}
// Рендерит шаблон в срез байт
func renderPage(
tmpl *template.Template,
tmplName string,
context any) ([]byte, error) {
func (a *App) renderPage(tmplName string, context any) ([]byte, error) {
var pageData bytes.Buffer
if err := tmpl.ExecuteTemplate(&pageData, tmplName, context); err != nil {
if err := a.templates.ExecuteTemplate(&pageData, tmplName, context); err != nil {
return nil, err
}
@ -103,10 +109,7 @@ func renderPage(
}
// Отправляет страницу
func 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)