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?

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.


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

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/...

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

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



-2

Vá para o caminho e digite

go get -u ./..

Ele atualizará todos os pacotes requeridos.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.