Jak Go aktualizuje pakiety innych firm?

189

Patrząc, jak aktywnie rosną i ulepszają się pakiety golang, zastanawiam się, jak rozwiązać problem z wersjami pakietów?

Widzę, że jednym ze sposobów jest przechowywanie pakietów innych firm w folderze projektu.

Ale co jeśli go zainstaluję go get?

shalakhin
źródło

Odpowiedzi:

309

go getzainstaluje pakiet w pierwszym katalogu wymienionym w GOPATH(zmienna środowiskowa, która może zawierać listę katalogów oddzieloną dwukropkami). Możesz użyć go get -udo aktualizacji istniejących pakietów.

Możesz także użyć go get -u alldo aktualizacji wszystkich pakietów w swoimGOPATH

W przypadku większych projektów rozsądne może być utworzenie różnych GOPATH dla każdego projektu, aby aktualizacja biblioteki w projekcie A nie powodowała problemów w projekcie B.

Wpisz, go help gopathaby dowiedzieć się więcej o GOPATHzmiennej środowiskowej.

tux21b
źródło
2
czy można zaktualizować wszystkie pakiety do najnowszej wersji, coś w rodzaju aktualizacji pakietu?
chourobin
73
powinienem tylko go get -u all przepraszać za wskrzeszenie, ale na wypadek, gdyby ktokolwiek szukał.
Dan Anderson
go get -u allnie działa! Uruchomienie tej komendy w GOPATH, przynajmniej dla Go 1.13, zwróci ostrzeżenie: „ostrzeżenie” wszystkie „nie pasują do żadnych pakietów”
Contrapak
Działa z Go 1.12.9
fviktor
61

Odpowiedź @tux jest świetna, chciałem tylko dodać, że możesz użyć go get, aby zaktualizować określony pakiet:

go get -u full_package_name
Salvador Dali
źródło
18

Ponieważ pytanie dotyczyło bibliotek innych firm, a nie wszystkich pakietów, prawdopodobnie powinieneś wrócić do używania symboli wieloznacznych.

Przypadek użycia: chcę po prostu zaktualizować wszystkie moje pakiety, które są uzyskane z Github VCS, wtedy po prostu powiedziałbyś:

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

To posunąłoby się do przodu i aktualizowałoby tylko twoje pakiety github w bieżącym $GOPATH

To samo dotyczy również VCS, powiedzmy, że chcesz uaktualnić tylko wszystkie pakiety z repozytoriów ograniczizaiton A, ponieważ po wydaniu poprawki zależy od:

go get -u github.com/orgA/...
dtx
źródło
11

Powyższe odpowiedzi mają następujące problemy:

  1. Aktualizują wszystko, w tym Twoją aplikację (na wypadek, gdybyś wprowadził niezatwierdzone zmiany).
  2. Zaktualizowali pakiety, które mogłeś już usunąć z projektu, ale są już na dysku.

Aby tego uniknąć, wykonaj następujące czynności:

  1. Usuń foldery innych firm, które chcesz zaktualizować.
  2. przejdź do folderu aplikacji i uruchom go get -d
Aus
źródło
2

przejść 1.13

(exec z głównego katalogu modułu)

Zaktualizuj określone zależności:

go get -u <package-name>

Zaktualizuj wszystkie bezpośrednie i pośrednie zależności do najnowszych drobnych aktualizacji lub aktualizacji (wersje wstępne są ignorowane):

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

Odniesienie:

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

go help get

F566
źródło
-2

Przejdź do ścieżki i wpisz

go get -u ./..

Zaktualizuje wszystkie wymagane pakiety.

kiki_ygn
źródło
Ta dosłowna interpretacja nie działa. Przydałby się większy kontekst.
Contrapak,
2
Wierzę, że miał na myśli go get -u ./...(3 kropki)
Brian Leishman