2016-05-24 2 views
4

Я создал библиотеку/пакет в Go, и консенсус заключался в том, что только приложения включают папку vendor в их проекте, а библиотеки - нет.Библиотечные зависимости в Go

Итак, теперь я включил my package в другой проект (govendor 'ed), и все работало нормально, пока не дошло до Дженкинса, и ему пришлось использовать свои локальные ресурсы, где отсутствовали 2 из зависимостей.

Мой проект readme говорит, что все, что вам нужно сделать, это go get мой проект, и все готово. Но это не так, если вы используете govendoring.

Каким должен быть подход к моей библиотеке? Можно ли это решить, или это «проблема», которую должен решить конечный пользователь, потому что они используют govendor?

ответ

3

Это скорее вопрос мнения. Думаю, однако я поделюсь тем, что я использую.

Я использую git subtree для vendoring суб сделок РЕПО в моем дереве затем добавить //go:generate строку, чтобы обновить его позже, например:

➜ git subtree add --prefix vendor/xxx/yyy/zzz https://github.com/xxx/yyy/zzz master --squash 

Затем добавить //go:generate git subtree pull --prefix vendor/xxx/yyy/zzz https://github.com/xxx/yyy/zzz master --squash к одному из моих файлов библиотек.

И просто запустите go generate, прежде чем я выпущу.

Это решение проблемы с выпуском без необходимости использования каких-либо внешних инструментов.

Живой пример: https://github.com/OneOfOne/xxhash/blob/master/xxhash_cgo.go

+0

Так это означает, что проект Сопровождающий должны работать идти генерировать до нажатия их последних изменений? –

+0

@GerbenJacobs правильно, но это также означает, что работа менеджера проекта должна гарантировать, что продаваемые библиотеки работают должным образом. – OneOfOne

+1

Хорошо, я вижу вашу мысль. Все это очень отличается от других языков, на которых есть выпущенные libs. Поэтому я думаю, что это действительно вопрос мнения. Я все равно приму ваш ответ и посмотрю, какой подход я хочу принять. Благодарю. –

Смежные вопросы