package main import ( "log" "main/mvc/controllers" controllers_pages "main/mvc/controllers/pages" "main/mvc/models" "main/tools" "net/http" ) /* sudo systemctl stop server.service go build main.go sudo systemctl start server.service */ func main() { var app *models.App var err error // Инициализация приложения if app, err = models.AppInit("config.json"); err != nil { log.Fatal(err) } // Настройка маршрутов и запуск if setupRoutesAndRun(app) != nil { log.Fatal(err) } } func setupRoutesAndRun(a *models.App) error { // Настройка маршрутов router := setupRoutes(a) // Запуск сервера if ok, err := tools.IsIPInUse(a.Config.ServerIP); err != nil { return err } else if ok { runServer(a.Config.ServerIP, a.Config.Port, router) } else { runServer(a.Config.LocalIP, a.Config.Port, router) } return nil } // Настраивает маршруты func setupRoutes(a *models.App) *http.ServeMux { router := http.NewServeMux() // Обработка статических файлов с кэшированием router.Handle(a.Config.AssetsPath, controllers.StaticHandler()) // Обработка главной страницы router.Handle("/", controllers_pages.MainPageHandler(a)) return router } // Обертка над ListenAndServe, запускает сервер на указанном IP, PORT func runServer(ip, port string, router http.Handler) { addr := ip + port log.Println("Run on", addr) log.Fatal(http.ListenAndServe(addr, router)) }