Как поделиться локальным модулем в Go 1.11+ для Golang с использованием архитектуры монолитного репо вне GOPATH

Контекст: мы используем монолитную архитектуру репозитория. Это означает, что у нас есть одно большое репозиторий на github со множеством проектов, каждый из которых использует свой собственный стек технологий для пользовательского интерфейса, узла, go и т. Д.

> /home/workspace/
>        ./nodejs_project1
>        ./reactui_project2
>        ./reactnative_ui_project3
>        ./go_identity_service_project4
>        ./go_graphql_api_project5
>        ./go_common  (<--- how to share this with other go modules?)
> 
> /home/go (GOPATH) - only for 3rd party vendor downloads fro go-get
>       ./src
>       ./bin
>       ./pkg

В go_common у нас есть общий код, используемый во всех проектах go, таких как ведение журнала, подключения к базе данных, наши схемы / модели в виде структур и т. Д. Мы используем Go 1.11 и объявляем модули в go.mod. У нас также есть все это рабочее пространство и проекты ВНЕ нашего GOPATH. Мы не хотим, чтобы какие-либо модули, загруженные поставщиками / сторонними производителями, внутри нашего репо, аналогично тому, как мы .gitignore node_modules в нашем проекте node.js. Итак, go-get загружает модули поставщиков в GOPATH src / pkg, как и ожидалось, и они доступны для импорта в любой проект go.

Однако мы не можем заставить работать импортные ссылки модуля go_common. Мы пробовали выполнить go build и go install в go_common, который создал двоичный файл в GOPATH / bin, но это не помогло сделать его пригодным для ссылки. Есть ли стандартный способ сделать это, особенно теперь, когда Go 1.11 и vgo интегрированы, предполагается, что он не полагается на GOPATH и упростит управление модулями ... ??


person bjm88    schedule 22.09.2018    source источник
comment
Это помогает / решает вашу проблему? Как использовать модуль, не входящий в GOPATH, в другом модуле?   -  person icza    schedule 22.09.2018
comment
Я протестирую его сегодня вечером, но похоже, что да. Я думаю, что объявление локального пути к модулю - это именно то, что я искал, особенно если он относительный и вообще не связан с GOPATH. Это должно быть лучше задокументировано, возможно, поскольку это очень распространенный шаблон, а другие инструменты, такие как maven, справляются с этим очень просто.   -  person bjm88    schedule 22.09.2018
comment
Итак, при первой попытке он выдает ошибку синтаксического анализа go.mod при сборке, также не уверен, что я буду использовать в качестве версии только v0.0.0? ... module mycompany.com/product/identityservice require (замените company.com/product/ go_common v0.0.0 = ›../go_common ....   -  person bjm88    schedule 22.09.2018
comment
Хорошо, думаю, это работает, замена должна быть полностью вне списка require (). Спасибо! если поставите ответ, то проголосую за.   -  person bjm88    schedule 22.09.2018
comment
Если вам подходит то же решение, я просто помечу его как дубликат.   -  person icza    schedule 22.09.2018