Как Go обновляет сторонние пакеты?

Посмотрите, как активно растут пакеты golang и улучшаются. Интересно, как решена проблема с версиями пакетов?

Я вижу, что один из способов - хранить сторонние пакеты в папке проекта.

Но что, если я установлю его с помощью go get?

Ответ 1

go get установит пакет в первый каталог, указанный в GOPATH (переменная среды, которая может содержать список каталогов, разделенных двоеточиями). Вы можете использовать go get -u для обновления существующих пакетов.

Вы также можете использовать go get -u all для обновления всех пакетов в GOPATH

Для более крупных проектов было бы разумно создать разные GOPATH для каждого проекта, так что обновление библиотеки в проекте A не вызовет проблем в проекте B.

Введите go help gopath, чтобы узнать больше о переменной среды GOPATH.

Ответ 2

Ответ @tux велик, просто хотел добавить, что вы можете использовать go для обновления определенного пакета:

go get -u full_package_name

Ответ 3

В связи с тем, что упомянутые сторонние библиотеки, а не все, вы, вероятно, захотите вернуться к использованию подстановочных знаков.

Вариант использования: я просто хочу обновить все мои пакеты, полученные из VCS Github, тогда вы просто скажете:

go get -u github.com/... // ('...' being the wildcard). 

Это будет продолжаться и обновлять ваши пакеты github только в текущем $GOPATH

То же самое относится и к VCS, скажем, вы хотите только обновить все пакеты из ogranizaiton A repo, так как они выпустили исправление, от которого вы зависите:

go get -u github.com/orgA/...

Ответ 4

Вышеуказанные ответы имеют следующие проблемы:

  • Они обновляют все, включая ваше приложение (если у вас есть незафиксированные изменения).
  • Они обновили пакеты, которые вы, возможно, уже удалили из своего проекта, но уже на вашем диске.

Чтобы избежать этого, выполните следующие действия:

  • Удалите папки сторонних производителей, которые вы хотите обновить.
  • перейдите в папку приложения и запустите go get -d

Ответ 5

Перейдите по пути и введите

go get -u ./..

Это обновит все требуемые пакеты.