Простой бэкенд на Go для сайта с информацией о нейросетевых моделях и датасетах проекта.
Сервер только отдаёт готовые HTML-страницы и их CSS/JS из папки web/.git
Рядом с исполняемым файлом должна лежать папка web/, или укажите путь к ней флагом -dir.
| URL | Файл | Содержимое |
|---|---|---|
/ |
web/index.html |
обзор проекта |
/models |
web/models.html |
таблица моделей и их метрик |
/datasets |
web/datasets.html |
таблица датасетов |
| любой несуществующий | web/404.html |
страница «не найдено», статус 404 |
Все GET-запросы обрабатывает одна функция, которая превращает URL в путь к файлу в web/:
path.Cleanнормализует путь: убирает.., двойные и конечные слэши. Поэтому выйти за пределыweb/нельзя./превращается в/index.- Если у пути нет расширения, к нему дописывается
.html:/models→web/models.html. - Если файл существует, его отдаёт
http.ServeFile. Он сам выставляетContent-Typeи заголовки кэширования. - Если файла нет, сервер отдаёт
web/404.htmlсо статусом 404.
Запросы с методами, отличными от GET и HEAD, получают 405 Method Not Allowed.
- Положите файл в
web/, напримерweb/about.html. - Страница сразу будет доступна по адресу
/about. Перезапускать сервер не нужно: файлы читаются с диска при каждом запросе. - При необходимости добавьте ссылку в меню (
<nav>) на остальных страницах.
CSS, JS и картинки можно класть в любые подпапки web/. Они отдаются по своему пути, например web/img/logo.png → /img/logo.png.
Подключайте ресурсы по абсолютным путям (/css/style.css), а не по относительным (css/style.css). Иначе на адресах вида /models/ браузер будет искать файлы не в той папке.