Skip to content

Лучший шаблон для ваших Backend-проектов на Go от InTeam-Russia (скорее всего)

Notifications You must be signed in to change notification settings

InTeam-Russia/go-backend-template

Repository files navigation

Добро пожаловать! Это шаблон для бекенда на Go от InTeam Russia

Как это запускать?

Пояснения

  1. Ниже приведены команды, где вместо <название_БД> и <имя_пользователя> вы подставляете, что хотите, лишь бы без угловых скобок и на латинице. В данном случае это название БД и имя пользователя в PostgreSQL соответственно.
  2. Dragonfly - это Key-Value база данных, которая имеет полную совместимость с API редиски, но не является её форком. А ещё довольно производительная, многопоточная и вообще...
  3. Если вы работаете на Linux, вероятно потребуется ввести sudo перед командами, которые содержат в себе docker.

Docker Compose

Данный Docker Compose не рекомендуется использовать для продакшена, так как он не устанавливает пароли для БД и вообще возможно сыроват. Зато фронтендерам будет удобно (наверно).

Первый шаг - запустить сам сервис

DB_NAME=<название_БД> DB_USER=<имя_пользователя> docker compose up backend db dragonfly

Второй шаг - инициализировать БД (будут созданы таблицы, а также первый администратор)

DB_USER=<название_БД> DB_NAME=<имя_пользователя> docker compose run --rm initdb

Готово! Ваш бекенд готов к изнурительной работе на господина-фронтенда.

Хочу сам севрер локально запустить, а всё остальное через Docker

Первый шаг - запускаем PostgreSQL и Dragonfly

docker run --rm --name psql -e POSTGRES_HOST_AUTH_METHOD=trust -e POSTGRES_DB=<название_БД> -e POSTGRES_USER=<имя_пользователя> --network=host postgres:17.1-alpine
docker run --rm --name dragonfly --ulimit memlock=-1 --network=host docker.dragonflydb.io/dragonflydb/dragonfly

Второй шаг - копируем .env.example в .env и меняем по вкусу

cp .env.example .env
nvim .env

Третий шаг - инициализируем БД

go run cmd/initdb/main.go

Четвёртый шаг - запускаем проект

go run cmd/webserver/main.go

Я хочу сюда комитить, чтобы всё было красиво

Тогда выполни эту команду (предварительно установив в свою ОС pre-commit):

pre-commit install

Что ещё?

  1. Во-первых, всё это чудо, как вы могли догадаться, написано на Go. Просто потому что он хайповый, производительный, компилируется быстро, он простой, все дела.
  2. В качестве либы для PostgreSQL используется pgx, просто потому что он не deprecated, в отличие от некоторых.
  3. Для дракоши используется go-redis. Дракономух идеально умеет мимикрировать под редиску, поэтому и используем эту либу.
  4. Для логов используем Zap. Быстрый, есть настройка уровня логгирования, написан Uber'ом. Why not, как говорится.
  5. В качестве веб-фреймворка используем Gin. Поддерживает валидацию JSON, хайповый, а больше ничего и не надо.

Также, если хотите, вы можете почистить БД от ваших шалостей. Для этого вы можете выполнить одну из приведённых команд (в зависимости от вашего способа запуска):

DB_USER=<название_БД> DB_NAME=<имя_пользователя> docker compose run --rm dropdb
go run cmd/dropdb/main.go

Всё!

Теперь мы можем в полной мере наслаждаться бекендом на Go :)

About

Лучший шаблон для ваших Backend-проектов на Go от InTeam-Russia (скорее всего)

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •