Структура проекта на Golang?

Как правильно структурировать проект на Go? На сколько мне известно, в Go не принято дробить фалы на мелкие фалы. Т.е. в одном файле может быть сразу модель ,сервис и репозиторий. Есть ли какие-то бестпркатики по этому вопросу?
  • Вопрос задан
  • 8085 просмотров
Пригласить эксперта
Ответы на вопрос 1
EvgenyMamonov
@EvgenyMamonov Куратор тега Go
Senior software developer, system architect
Добрый день.

Это попытка стандартизировать структуру проекта (многие ориентируются на неё)
https://github.com/golang-standards/project-layout

Go-Kit - очень грамотная структура, очень
https://github.com/go-kit/kit

И обязательно стоит посмотреть
https://12factor.net/ru/

Что касается "Т.е. в одном файле может быть сразу модель, сервис и репозиторий. Есть ли какие-то бестпркатики по этому вопросу?" - то это не совсем так, в одном пакете (папке) может быть и модель, и сервис, и репозиторий". Например вот так:
yourpackage/service.go
yourpackage/repo.go
yourpackage/model.go
И это всё будет доступно в рамках пакета.

Лично я использую такую схему:
cmd/ - команды исполняемого файла
conf/ - конфиги приложения (env файлы)
init/ - конфиги logrotated, nginx, systemd и т.д.
pkg/ - публичные пакеты
pkg/packagename/ - тут определяются интерфейсы (сервиса, репозитория и т.д.) в разных файлах
pkg/packagename/endpoints/http - endpoint'ы для HTTP
pkg/packagename/repo/mysql - реализация репозитория на MySQL
pkg/packagename/repo/gorm - реализация репозитория на GORM (для примера)
pkg/packagename/service/ реализация сервиса

Я написал очень кратко, если что-то не понятно или есть вопросы - пишите, я опишу подробнее
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы