Como o Go atualiza pacotes de terceiros?

189

Olhando o quão ativamente os pacotes golang crescem e melhoram, eu me pergunto como o problema com as versões de pacotes é resolvido.

Vejo que uma maneira é armazenar pacotes de terceiros em uma pasta do projeto.

Mas e se eu o instalar go get?

shalakhin
fonte

Respostas:

308

go getinstalará o pacote no primeiro diretório listado em GOPATH(uma variável de ambiente que pode conter uma lista de diretórios separados por dois pontos). Você pode usar go get -upara atualizar pacotes existentes.

Você também pode usar go get -u allpara atualizar todos os pacotes em seuGOPATH

Para projetos maiores, pode ser razoável criar GOPATHs diferentes para cada projeto, para que a atualização de uma biblioteca no projeto A não cause problemas no projeto B.

Digite go help gopathpara descobrir mais sobre a GOPATHvariável de ambiente.

tux21b
fonte
2
é possível atualizar todos os pacotes para a versão mais recente, como uma atualização de pacote?
Chourobin
73
go get -u all lamento ressuscitar, mas no caso de alguém estar olhando.
Dan Anderson
go get -u allnão funciona mais! A execução desse comando no GOPATH, pelo menos no Go 1.13, retornará um aviso: `warning" all "não corresponde a nenhum pacote"
Contrapak
Funciona com o Go 1.12.9
fviktor 11/11/19
61

A resposta do @tux é ótima, só queria acrescentar que você pode usar o get get para atualizar um pacote específico:

go get -u full_package_name
Salvador Dalí
fonte
18

Como a pergunta mencionou bibliotecas de terceiros e nem todos os pacotes, você provavelmente desejará voltar a usar caracteres curinga.

Um caso de uso: Eu só quero atualizar todos os meus pacotes que são obtidos no Github VCS, e você diria apenas:

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

Isso iria adiante e atualizaria apenas os pacotes do github no atual $GOPATH

O mesmo se aplica a um VCS também, digamos que você queira atualizar apenas todos os pacotes dos repositórios do ogranizaiton A, pois eles lançaram um hotfix do qual você depende:

go get -u github.com/orgA/...
dtx
fonte
11

As respostas acima têm os seguintes problemas:

  1. Eles atualizam tudo, incluindo seu aplicativo (caso você tenha alterações não confirmadas).
  2. Eles atualizaram os pacotes que você já pode ter removido do seu projeto, mas já está no seu disco.

Para evitá-los, faça o seguinte:

  1. Exclua as pastas de terceiros que você deseja atualizar.
  2. vá para a pasta do seu aplicativo e execute go get -d
Aus
fonte
1

vai 1,13

(exec do diretório raiz do módulo)

Atualize as dependências especificadas:

go get -u <package-name>

Atualize todas as dependências diretas e indiretas para as atualizações secundárias ou de patch mais recentes (as pré-versões são ignoradas):

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

Referência:

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

go help get

F566
fonte
-2

Vá para o caminho e digite

go get -u ./..

Ele atualizará todos os pacotes requeridos.

kiki_ygn
fonte
Essa interpretação literal não funciona. Um pouco mais de contexto seria útil.
Contrapak 8/09/19
2
Eu acredito que ele quis dizer go get -u ./...(3 pontos)
Brian Leishman