Учебное веб-приложение для учета книг, пользователей, выдачи и возврата книг.
- Go 1.23,
net/http, graceful shutdown поSIGINT/SIGTERM - PostgreSQL,
pgx/v5 pongo2, HTML 5, Bootstrap 5, JavaScript- Docker Compose, Make
Трёхслойная: transport -> service -> repository.
internal/transport/http— HTTP-маршруты, формы, AJAX, flash-сообщения, рендеринг HTMLinternal/service— бизнес-логика и валидацияinternal/repository— работа с PostgreSQL, транзакции
Серверная шаблонизация — pongo2 (Jinja/Django-подобный синтаксис для Go).
docker compose upПосле запуска приложение будет доступно по адресу:
http://localhost:8081
make up # запустить PostgreSQL и приложение
make restart # перезапустить приложение
make stop # остановить контейнеры без удаления
make down # остановить и удалить контейнеры/сеть
make reset # остановить и удалить контейнеры/volumes
make logs # смотреть логи приложения
make ps # статус контейнеров
make test # go test ./... в DockerДля временного подключения к PostgreSQL из pgAdmin можно открыть локальный проброс через socat:
make db-forwardПока команда работает, в pgAdmin можно подключаться к localhost:5432.
Если порт занят, укажи другой:
make db-forward DB_FORWARD_PORT=5433Остановить проброс можно через Ctrl+C или командой:
make db-forward-stopЧувствительные данные лежат в локальном .env, этот файл добавлен в .gitignore.
Для нового окружения можно взять .env.example за основу и обязательно заполнить POSTGRES_PASSWORD.
Нужны Go 1.23+ и PostgreSQL.
createdb library
export DATABASE_URL='postgres://library_app:your-strong-password@localhost:5432/library?sslmode=disable'
go run ./cmd/libraryGET /- главная страница со статистикой.GET /add_user,POST /add_user- пользователи.POST /delete_user/{id}- удаление пользователя.GET /add_book,POST /add_book- книги.POST /delete_book/{id}- удаление книги.GET /borrow_book,POST /borrow_book- выдача и возврат книг.GET /get_borrowed_books?user_id={id}- AJAX-список книг на руках у пользователя.
