В чем разница между `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.