Какую структуру следует применять при создании go-сервиса?

Какой стандарт структуры следует использовать при создании простого go-сервиса для обработки CRUD http запросов и возврата JSON? Нужна рекомендация по гитхаб проектам с примерами этой структуры для изучения.
  • 11 февраля 2024 г. 7:29
Ответы на вопрос 2
В Go нет строгих стандартов организации кода для сервисов, но есть ряд принятых практик, которые помогают в создании гибкой и легко поддерживаемой архитектуры. Популярным подходом для организации структуры проекта в Go является использование следующих папок и пакетов:

1. `cmd` — содержит подкаталоги с точками входа для каждой исполняемой программы. Например, `cmd/myapp` содержит файл `main.go`, который является точкой входа вашего сервиса.
2. `internal` — содержит приватные пакеты, которые используются вашим приложением и не предназначены для импорта другими проектами.
3. `pkg` — содержит пакеты, которые могут быть использованы другими проектами (публичные API).
4. `api` — содержит описание API, например, файлы Protobuf или OpenAPI (Swagger) спецификации.
5. `configs` — содержит конфигурационные файлы вашего приложения.
6. `tests` — содержит дополнительные внешние тесты, если они есть (помимо тестов внутри пакетов).

Для CRUD операций с HTTP и JSON можно следовать следующей структуре:

- `main.go`: Инициализация сервиса и запуск HTTP сервера.
- `handlers/`: Обработчики HTTP запросов, преобразование данных запросов в структуры и формирование JSON ответов.
- `models/`: Описание структур данных и возможно взаимодействие с бизнес логикой.
- `services/`: Бизнес-логика приложения.
- `repositories/`: Слой для работы с базой данных или другим хранилищем данных.
- `middleware/`: Промежуточное ПО для HTTP сервера, такое как логирование, аутентификация и т.п.

Простой пример структуры проекта будет выглядеть так:

```
/myapp
  /cmd
    /myapp
      - main.go
  /internal
    /handlers
      - user_handler.go
    /models
      - user.go
    /services
      - user_service.go
    /repositories
      - user_repository.go
  /pkg
  /api
  /configs
    - config.yaml
  /tests
```

Один из известных проектов с хорошими практиками организации кода в Go — это `golang-standards/project-layout`. Это не стандарт в строгом смысле, но скорее коллекция общих практик, которыми делятся опытные Go-разработчики. Его можно найти на GitHub: https://github.com/golang-standards/project-layout

Для конкретных примеров Go-проектов, структурированных под CRUD операции, можно поискать на GitHub проекты с использованием таких фреймворков, как Gin, Echo или Chi. Просто используйте поисковый запрос вида "CRUD service in Go" и вы найдете множество репозиториев с реальными примерами кода и проектных структур.
Есть официальный документ на эту тему, рекомендую
Похожие вопросы