Проблема зависимости в двух проектах, использующих одну и ту же библиотеку - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть два проекта:

/myproject
/sharedproject

они оба управляются dep, я выполнил go get -u github.com/golang/dep/cmd/dep, чтобы получить последнюю версию dep, и запустил dep ensure в обоих проектах.

Когда я запускаю myproject, я получаю следующую ошибку:

cannot use op (type *"myproject/vendor/github.com/go-openapi/spec".Operation) as type *"sharedproject/vendor/github.com/go-openapi/spec".Operation

Что не так и как это исправить?

1 Ответ

0 голосов
/ 12 сентября 2018

Похоже, что ситуация sharedproject обеспечивает зависимость github.com/go-openapi/spec, в то время как myproject получает как sharedproject, так и github.com/go-openapi/spec зависимости от GOPATH.

Теперь, когда вы ссылаетесь на github.com/go-openapi/spec в sharedproject, это относится к пакет внутри каталога vendor, который технически отличается от один и тот же пакет в GOPATH, даже если оба имеют одинаковое содержимое. Поэтому, когда вы передаете переменная типа *github.com/go-openapi/spec.Operation от myproject до Функция в sharedproject, пакет типа отличается от ожидаемого, и компиляция не удалась.

Чтобы решить эту проблему, убедитесь, что sharedproject продается внутри myproject. когда если вы сделаете это, dep ensure поместит копию sharedproject без поставщика каталог в каталог поставщика myproject. После этого myproject и sharedproject будут использовать пакет github.com/go-openapi/spec из каталога поставщиков myproject.

Это затрудняет локальное развитие, если вы часто меняете sharedproject и хотите немедленно использовать эти изменения в myproject (нельзя использовать dep, пока изменения не будут переданы на пульт Git). Я бы обойти это, копируя более sharedproject в каталог поставщиков myproject вручную без использования dep (за исключением, конечно, каталога поставщиков). Будьте осторожны, чтобы не фиксировать эти скопированные вручную изменения в Git!

...