package models import ( "html/template" "log" "os" "path/filepath" "strings" "time" ) // App хранит информацию о приложении type App struct { Config *Config // Конфиг Templates *template.Template // Шаблоны страниц Cache *Cache // Кэш (отрендеренные странички) Version int64 // Время запуска } // Инициализирует приложение func AppInit(configPath string) (*App, error) { a := &App{ Version: time.Now().Unix(), Config: ConfigInit(), Cache: CacheInit(), } // Загрузка конфига if err := a.Config.Load(configPath); err != nil { return nil, err } // Загрузка шаблонов if err := a.loadTemplates(a.Config.TemplatesPath, a.Config.TemplatesExt); err != nil { log.Fatal(err) } return a, nil } // Загрузка шаблонов 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 { if err != nil { return err } if !f.IsDir() && strings.HasSuffix(f.Name(), ext) { _, err = tmpls.ParseFiles(path) if err != nil { return err } } return nil }) if err != nil { return err } a.Templates = tmpls return nil }