Пакет поставщика, который находится в папке поставщика другого проекта.

Я пишу пакет библиотеки, который зависит от определенного импорта, но я не уверен, как правильно с ним обращаться.

Начну со структуры каталогов:

go/src/github.com/
├── developer A/
│   ├── project 1
│   └── project 2
│   
└── developer B/
    └── project 3
        └── vendor
            └── project 4

Проект 1 — это библиотека. Он используется в проекте 2 и помещается в папку поставщика 2s. Поэтому проект 1 должен содержать все свои зависимости, чтобы клиентам (например, проекту 2) не нужно было их извлекать. Однако одной зависимостью проекта 1 является проект 4, который содержится в папке поставщика проекта 3. Очень важно, чтобы эта зависимость всегда была именно той версией, которую предоставляет проект 3. Go не позволяет импорту указывать на пакеты внутри папок поставщика, поэтому я не могу импортировать его напрямую оттуда. Как решить эту проблему с помощью govendor?


person Gilrich    schedule 16.11.2018    source источник
comment
Вы контролируете проект 3? Как правило, библиотеки не должны продавать свои зависимости — это должны делать только конечные продукты. Вместо этого библиотеки должны объявлять свои зависимости с помощью dep или подобного инструмента.   -  person Flimzy    schedule 16.11.2018
comment
Нет, я не контролирую проект 3. Я контролирую проекты 1 и 2. Я пытался вытащить одну и ту же версию проекта 4 в папку поставщика проекта 2, но это не работает, поскольку Go считает, что это разные типы, потому что они находятся в разных репозитории.   -  person Gilrich    schedule 16.11.2018


Ответы (1)


Go не позволит вам зайти в каталог поставщиков другого проекта. Похоже, вы намерены обеспечить версии. Это то, что go modules поручено сделать. Посетите вики для получения дополнительной информации.

person poy    schedule 16.11.2018
comment
Это выглядит хорошо. Однако пока я застрял на Go 1.9.4 и не могу использовать модули. - person Gilrich; 16.11.2018
comment
Как насчет использования glide или godep? - person Shudipta Sharma; 16.11.2018
comment
Они также будут работать, однако я должен посоветовать вам подумать об обновлении, поскольку go1.9 перестал поддерживаться, когда go1.11 был выпущен. Я также склонен с осторожностью относиться к командам, выбирающим не go mod, так как это, вероятно, будет победителем в этой области. - person poy; 16.11.2018