Як Go оновлює сторонні пакети?


189

Дивлячись, як активно ростуть і вдосконалюються пакети голанг, мені цікаво, як вирішується проблема з версіями пакунків?

Я бачу, що одним із способів є зберігання сторонніх пакетів у папці проекту.

Але що робити, якщо я встановив його go get?

Відповіді:


309

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

Ви також можете використовувати go get -u allдля оновлення всіх пакунків у вашомуGOPATH

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

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


2
чи можливо оновити всі пакети до останньої версії, на кшталт оновлення пакета?
чоробін

73
слід просто go get -u all шкодувати, що воскресити, але про всяк випадок, коли хтось ще шукав.
Ден Андерсон

go get -u allбільше не працює! Запустивши цю команду в GOPATH, принаймні для Go 1.13, поверне попередження: `попередження" всі "не відповідає пакетам"
Contrapak

Працює з Go
1.12.9

61

@tux відповідь чудова, просто хотів додати, що ви можете використовувати go get для оновлення певного пакету:

go get -u full_package_name

18

Оскільки в цьому питанні згадуються сторонні бібліотеки та не всі пакунки, то, ймовірно, ви хочете перейти до використання символів.

Випадок використання: Я просто хочу оновити всі свої пакунки, отримані від Github VCS, тоді ви просто скажете:

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

Це продовжуватиметься та лише оновить ваші пакети github у поточному режимі $GOPATH

Те саме стосується і всередині VCS, скажімо, ви хочете оновити лише всі пакети з репо-файлів ogranizaiton A, оскільки вони випустили виправлення, від яких ви залежите:

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

11

Вищезгадані проблеми мають такі проблеми:

  1. Вони оновлюють все, включаючи вашу програму (на випадок, якщо ви змінили зміни).
  2. Вони оновлювали пакунки, які ви, можливо, вже видалили зі свого проекту, але вже є на вашому диску.

Щоб цього уникнути, виконайте наступне:

  1. Видаліть сторонні папки, які ви хочете оновити.
  2. перейдіть до папки додатків і запустіть go get -d

2

піти 1.13

(виконати з кореневого каталогу модуля)

Оновити вказані залежності:

go get -u <package-name>

Оновіть усі прямі та непрямі залежності до останніх незначних або оновлених оновлень (попередні випуски ігноруються):

go get -u ./...
# or
go get -u=patch ./...

Довідка:

https://github.com/golang/go/wiki/Modules#daily-workflow

go help get



-2

Перейдіть до контуру та введіть

go get -u ./..

Він оновить усі необхідні пакети.


Це буквальне тлумачення не працює. Ще трохи контексту було б корисно.
Контрапак

2
Я вірю, він мав на увазі go get -u ./...(3 крапки)
Брайан Лейшман
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.