Go и htmx: приложение «Инвентарь»
Построим «Инвентарь» — один развивающийся учебный проект. Каждый урок добавляет конкретный результат к предыдущему, сохраняя предметные данные и имена объектов. Серия входит в подборку «Новые возможности веб-приложений: 100 уроков».
Последовательность уроков
| № | Урок | Что добавляем |
|---|---|---|
| 1 | Первый HTTP-сервер на Go | Локальный сервер, маршруты и граница HTTP |
| 2 | Предметная модель инвентаря | Артикул, остаток, место хранения и неизменяемый идентификатор |
| 3 | Серверные HTML-шаблоны | Экранированная таблица и отдельная модель представления |
| 4 | Хранение инвентаря в SQLite | Таблица items, ограничения и параметризованное чтение |
| 5 | Создание карточки через форму | POST, разбор формы и перенаправление после записи |
| 6 | Ошибки формы и повторный ввод | Проверка полей, сохранение введённых значений и статус 422 |
| 7 | Фильтрация и страницы списка | Поиск в URL, стабильный порядок и ограниченный размер страницы |
| 8 | Обновление списка через htmx | Полная HTML-страница и фрагмент с одинаковыми данными |
| 9 | История URL и доступная навигация | Push URL, восстановление полной страницы и состояния ошибок |
| 10 | Редактирование и версия карточки | Условный UPDATE и конфликт двух открытых форм |
| 11 | Движения остатка и транзакция | Атомарная корректировка количества вместе с журналом |
| 12 | Локальная сессия и защита формы | Случайная серверная сессия, CSRF и завершение входа |
| 13 | Права на чтение и изменение | Viewer и editor, решение на сервере и закрытые действия |
| 14 | Завершение сервера и сопровождение | Таймауты, штатная остановка и рабочие границы стенда |
Исходники и окружение
Скачать исходники «Инвентарь». Архив содержит 14 полных самостоятельных состояний lesson-01 … lesson-14. Каждую папку используйте отдельно; накладывать соседние состояния друг на друга не требуется. README каждого состояния объясняет файлы, команды самостоятельного прохождения и ограничения.
Версии курса: Go 1.27.2, htmx 2.0.11, modernc.org/sqlite 1.60.1. Сервер слушает только 127.0.0.1:4493. В архиве нет установленных зависимостей, пользовательских баз, сессий или секретов.
Требуется базовое знание Go и HTML. Первые три урока используют стандартную библиотеку, затем подключается SQLite, а с восьмого — htmx. Учебные роли выбираются локально без проверки личности; такой вход не предназначен для публичного корпоративного сервиса. Поиск SQLite не обещает полноценное Unicode-приведение регистра. Журнал движения не является полным аудитом всех изменений, потому что форма корректировки остатка остаётся отдельной операцией.
При подготовке программы, зависимости, базы, браузерные клиенты и проверки не запускались. Все результаты в уроках обозначены как ожидаемые по исходникам. Материалы опубликованы.