GoCode - платформа для изучения go. Тут можно проходить тесты, решать задачи и изучать go с нуля!
Разработан многостраничный сайт, который поддерживает REST, gRPC, работу с базами данных, docker, k8s и тд
Структура проекта
Архитектура вашего проекта организована согласно современным практикам для облегчения разработки, тестирования, поддержки и развертывания. Рассмотрим каждый раздел структуры вашего проекта, его назначение и причины, почему такая структура полезна.
Основная структура проекта
C:.
├───.github
│ └───workflows
├───.vscode
├───api
│ ├───grpc
│ │ ├───gen
│ │ │ └───pb-go
│ │ │ └───com.user_data
│ │ ├───proto
│ │ └───server
│ └───rest
├───cmd
├───internal
│ ├───app
│ ├───config
│ │ └───secrets
│ ├───db
│ └───middleware
├───migrations
├───pkg
├───scripts
├───test
└───web
├───app
├───static
│ ├───assets
│ ├───css
│ └───js
└───templates
Подробный разбор
.github
Этот каталог содержит конфигурации для GitHub Actions. GitHub Actions - это CI/CD инструмент для автоматизации задач сборки, тестирования и развертывания вашего проекта. Размещение конфигураций CI/CD в репозитории позволяет автоматизировать эти процессы при каждом изменении кода.
.github/workflows
- файлы рабочих процессов для GitHub Actions.
.vscode
Этот каталог содержит конфигурации для редактора Visual Studio Code. Настройки и расширения, специфичные для проекта, размещены здесь, что позволяет разработчикам иметь единое окружение.
api
Этот каталог организует код, связанный с API. Обычно используется для отделения логики, связанной с API, от остальной части кода.
grpc
- код, связанный с gRPC API.
gen
- сгенерированный код из proto файлов.
pb-go
- сгенерированный Go код.
com.user_data
- подкаталог для определенного набора данных.
proto
- proto файлы, используемые для генерации gRPC кода.
server
- серверная логика для gRPC API.
rest
- код, связанный с REST API.
cmd
Каталог cmd
используется для размещения точек входа вашего приложения. Например, если у вас есть несколько приложений в одном репозитории, каждое из них будет иметь свой подкаталог в cmd
, содержащий main.go
.
internal
Каталог internal
содержит внутренние пакеты, которые не предназначены для использования вне вашего проекта. Этот механизм обеспечивает инкапсуляцию и защищает внутренние детали реализации.
app
- основная логика приложения.
config
- конфигурационные файлы и их обработка.
secrets
- секреты и конфиденциальные данные.
db
- код, связанный с базой данных.
middleware
- промежуточное ПО для обработки запросов.
migrations
Каталог migrations
используется для хранения файлов миграций базы данных. Эти файлы используются для создания, изменения и управления схемой базы данных.
pkg
Каталог pkg
используется для пакетов, которые могут быть переиспользованы в других проектах. Этот подход помогает создавать модули, которые можно легко импортировать и использовать вне основного проекта.
scripts
Каталог scripts
используется для хранения вспомогательных скриптов для автоматизации задач, таких как развертывание, сборка или обслуживание.
test
Каталог test
используется для хранения тестов, которые могут быть организованы отдельно от кода. Это позволяет поддерживать тесты в чистоте и легко управлять ими.
web
Каталог web
содержит веб-ресурсы и фронтенд-код.
app
- основное приложение фронтенда.
static
- статические файлы, такие как изображения, CSS, JavaScript.
assets
- ассеты, такие как изображения и шрифты.
css
- стили CSS.
js
- JavaScript файлы.
templates
- HTML шаблоны, используемые сервером для рендеринга страниц.
Почему такая структура важна
-
Модульность: Деление проекта на модули (каталоги) позволяет управлять кодом более эффективно. Каждый модуль может разрабатываться, тестироваться и изменяться независимо от других.
-
Читаемость и поддерживаемость: Организованный код легче читать и поддерживать. Новые разработчики могут быстро понять структуру проекта и найти необходимые файлы.
-
Инкапсуляция: Использование internal
для защиты внутренних деталей реализации помогает предотвратить непреднамеренное использование этих деталей в других частях проекта или в других проектах.
-
Тестируемость: Четкая структура помогает в написании и поддержке тестов. Разделение тестов и основного кода улучшает управляемость и ясность.
-
Автоматизация: Наличие конфигураций для CI/CD в .github
и скриптов в scripts
помогает автоматизировать сборку, тестирование и развертывание, что повышает эффективность разработки и уменьшает количество ошибок.