В чем разница между `go install`, `govendor install +local` и `govendor install +vendor,^program`?

При использовании govendor, в чем разница между go install, govendor install +local а также govendor install +vendor,^program?

govendor install +vendor,^program говорит, чтобы собрать и установить все мои пакеты вендора. но что и куда он будет устанавливать? Будет ли он устанавливать исполняемые файлы команд моего проекта и вендора в $GOPATH/bin и мои объекты пакета проекта и поставщика в $GOPATH/pkg?

govendor install +local говорит, чтобы построить все в вашем хранилище только. Так что это на самом деле означает? Это создаст vendor/bin а также vendor/pkg?

что если я бегу go install в моем проекте? Чем это будет отличаться от двух приведенных выше команд?

1 ответ

Go впервые появился в мире с совершенно новой идеей для управления зависимостями и структурой папок рабочего пространства. Там была строгая иерархия, где проекты будут расположены (в $gopath/src/site.com/user/project) и другие проекты будут просто импортировать последнюю версию всех других проектов. Проблема в том, что если какой-то проект из верхнего уровня изменит API, то ваш проект непонятным образом оборвется. Вот где приходит продавец.

Vendor - это подкаталог в вашем проекте, который содержит все $gopath/src что ваш проект импортирует. Разница в том, что вендор не обновляется, когда вышестоящие проекты вводят новые функции и / или исправления. Поэтому вы должны обновить его самостоятельно. Когда go ищет импорт (начиная с последней версии), он сначала проверяет поставщика, а затем ищет последнюю версию в вашем $gopathпредотвращение необъяснимого разрушения сборок без видимой причины.

go install обновляет ваш $gopath зависимости до последней версии; версия, которую будут использовать все новые проекты и проекты без поставщика.

govendor install +vendor,^program обновляет зависимости вашего конкретного поставщика проекта. Это должно быть сделано в отдельном коммите; вам следует go test; govendor; git commit; go test так что вы можете проверить, не нарушают ли обновления ваш проект.

govendor install +local видимо просто строит проект.

Кроме того, вы должны ИМХО использовать godep, а не govendor. Это IHMO имеет лучший рабочий процесс; ваш $gopath имеет последние версии, а затем вы можете обновить свой проект с godep update, Он также должен быть стандартным в Голанге 1.10.

Другие вопросы по тегам