несколько проектов go и совместное использование каталога вендора (в go до 1.11) - PullRequest
0 голосов
/ 31 октября 2018

Я начал изучать go (1.7.4) и у меня есть проект, который в настоящее время производит два исполняемых файла. У меня есть структура каталогов, как показано ниже стандартного макета Go:

GOPATH=`pwd`
bin
src/
src/<project1>
src/<project1>/vendor
src/<project1>/glide.yaml
src/<project2>
src/<project2>/vendor
src/<project2>/glide.yaml
pkg/

Проект 1 и проект 2 имеют много зависимостей. Есть ли способ совместно использовать каталог vendor между project1 и project2 и при этом закреплять версии для обеспечения воспроизводимых сборок?

Я не хочу дублировать каталоги glide.yaml и vendor для каждого проекта, так как он раздувает сборку и нарушает DRY.

Каталог pkg - очевидный способ сделать это, но в отличие от поставщика, у меня нет инструмента менеджера зависимостей, такого как glide, чтобы гарантировать использование определенной версии (см. Также мой связанный вопрос ).

Возможно, связанная с этим проблема заключается в том, как организован этот проект. Я верю, что в go было бы более обычным для каждого подкаталога проекта отображаться в один репозиторий github. Однако для моего проекта я хочу создать как минимум два исполняемых файла. Я понимаю, что вы можете сделать это, используя разные имена пакетов, но это сбивает с толку. Я боролся с тем, чтобы заставить его работать в рамках одного проекта, и решил / обнаружил, что проще использовать стандартную компоновку go и работать на два уровня выше. Например, преимущество заключается в том, что «go build» и т. Д. В подкаталогах просто работает без указания имени пакета. Я также могу обеспечить, чтобы мое оборудование для сборки, тестирования и упаковки на высшем уровне работало над всеми проектами и не зависело от других условий. Программы не достаточно сложны, чтобы гарантировать отдельные репозитории git (даже в виде подмодулей). Если есть шаблон, который делает эту работу, это может сделать мой оригинальный вопрос спорным.

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

Рекомендую взглянуть на новую систему вендора - https://github.com/golang/go/wiki/Modules

Позволяет исправить версии используемых пакетов:

module github.com/my/thing

require (
    github.com/some/dependency v1.2.3
    github.com/another/dependency/v4 v4.0.0
)
0 голосов
/ 31 октября 2018

Должна быть возможность иметь общий каталог поставщиков. То, как я это делаю, включает в себя Go 1.11 и новую функцию Go под названием модули. Но я уверен, что он должен работать с вендором и такими инструментами, как glide и dep. Чтобы использовать dep / glide, ваша структура каталогов может выглядеть следующим образом

- src
  - projects
      - project1
      - project2
      - vendor
      - Glide.yaml

И вы можете создать его либо из папки проектов, используя go build -o p1 project1/*.go, либо из отдельной папки проекта, используя go build

Та же структура, но вне GOPATH, будет работать для модулей Go 1.11. Вы должны установить переменную GO111MODULE в значение «on» или «auto». Напоминаем, что модули go хранят зависимости в каком-то другом месте и загружают их автоматически в процессе сборки при необходимости.

Примечание: страница glide github рекомендует перейти на dep как более официальный инструмент

Редактировать: только что проверил с деп. Это работает для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...