Я начал изучать 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 (даже в виде подмодулей). Если есть шаблон, который делает эту работу, это может сделать мой оригинальный вопрос спорным.