Итак, у меня есть несколько веб-сервисов, написанных на Go, и я планирую написать еще несколько.Все сервисы находятся в своих собственных папках за пределами GOPATH и используют Glide и Dep для управления зависимостями от производителя (я собираюсь в ближайшем будущем преобразовать их в модули Go 1.11).
Проблема, с которой я сталкиваюсь, заключается в том, чтомного дублирования кода в этих сервисах, что делает вещи хрупкими.Особенно код, связанный со структурой базы данных и доступом.Я хотел бы переместить весь доступ к базе данных и другой код, относящийся к конкретной службе, куда-нибудь в общую папку и импортировать его в службы по мере необходимости.
Как правильно это сделать?Я экспериментировал с различными структурами проекта, но всегда сталкивался с одной из двух проблем.
Если я использую модули Go 1.11, мне приходится делить go.mod и go.sum между всеми сервисами.Это удлиняет процесс сборки для отдельных служб, поскольку каждая сборка службы должна извлекать все зависимости из всех служб в одном и том же месте.По мере того, как число моих услуг будет расти, эта проблема будет усугубляться.
Если я установлю GOPATH так, чтобы мой сервисный код оказался внутри, я столкнулся с несколькими проблемами.Службы являются частью более крупного проекта, написанного на другом языке, и являются частью репозитория управления версиями для проекта.В настоящее время эта структура имеет вид
- project
- services
- svc1
- svc2
- othercode
- morecode
Если я установлю GOPATH для служб, мне придется переместить отдельные каталоги служб в отдельный src, я получу дополнительные каталоги pkg и bin и каждый пакет Go, который когда-либо получу.хочу, чтобы установка заканчивалась где-нибудь в дереве ~ / project / services.Я бы предпочел продолжать использовать зависимости от поставщиков.
Как организовать свой код, чтобы избежать любого из перечисленных выше сценариев и при этом иметь возможность импортировать общий код из нескольких служб?