package main import ( "fmt" "log" "main/mvc/controllers" "main/mvc/controllers/controllers_pages" "main/mvc/models" "main/tools" "net/http" ) func main() { var err error var app *models.App // Инициализация приложения if app, err = models.InitApp(); err != nil { log.Fatal(err) } // Добавление префикса в виде домена сервера к записям в лог log.SetPrefix(fmt.Sprintf("%s | ", app.Cfg.ServerDomain)) // Настройка маршрутов router := setupRoutes(app) // Запуск сервера if ok, err := tools.IsIPInUse(app.Cfg.ServerIP); err != nil { log.Fatal(err) } else if ok { runServer(app.Cfg.ServerIP, app.Cfg.ServerPort, router) } else { runServer(app.Cfg.LocalIP, app.Cfg.LocalPort, router) } } // Настраивает маршруты func setupRoutes(app *models.App) *http.ServeMux { router := http.NewServeMux() // Цепочка обработчиков, которые сработают до отдачи страницы юзеру m := controllers.MiddlewaresChain // Обработка статических файлов router.Handle(app.Cfg.AssetsDir, m(controllers.StaticHandler())) // Главные странички { // Обработка главной страницы router.Handle("/", m(controllers_pages.MainPageHandler(app))) // Обработка страницы со списком постов router.Handle("/posts/", m(controllers_pages.PostsPageHandler(app))) // Обработка страничек постов for key := range app.Posts { postLink := string(key) router.Handle(postLink, m(controllers_pages.PostPageHandler(app))) } } return router } // Запускает сервер на указанном IP, PORT func runServer(ip, port string, router http.Handler) { addr := ip + port log.Println("Run on", addr) log.Fatal(http.ListenAndServe(addr, router)) }