Go get repositório privado: guia passo a passo

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Go get de repositório privado: por que é um problema para iniciantes?



Você escreveu um pacote Go incrível, enviou para um repositório privado no GitHub e agora quer usá-lo em outro projeto. Você executa go get github.com/seunome/secret-lib — e recebe o erro 403 Forbidden ou remote: Repository not found. Familiar?



Essa situação é uma das armadilhas mais comuns para desenvolvedores Go iniciantes. A pergunta no Stack Overflow "What's the proper way to 'go get' a private repository?" tem milhares de visualizações. O problema é que go get por padrão usa HTTPS, não SSH, e não conhece suas credenciais.



Neste artigo, abordaremos três maneiras funcionais de configurar go get para repositórios privados: através de .gitconfig, .netrc e da variável de ambiente GOPRIVATE. Você aprenderá como evitar erros e economizar horas de depuração.



Por que o go get não funciona com repositórios privados?



Por padrão, go get tenta baixar o módulo via HTTPS. Para repositórios públicos, isso é aceitável — o acesso anônimo funciona. Mas repositórios privados exigem autenticação. O Go não sabe como inserir login/senha ou token automaticamente.



O segundo problema é o mecanismo de descoberta de módulos. O Go primeiro verifica se o repositório existe no GitHub/GitLab/Bitbucket, analisando a página HTML. Para repositórios privados, essa página não está disponível sem autorização. Daí o erro repository not found, embora o repositório exista.



Método 1: editando ~/.gitconfig (o mais simples)



O caminho mais fácil é forçar o Git a usar SSH em vez de HTTPS para um domínio específico. Adicione as seguintes linhas ao arquivo ~/.gitconfig:



[url "git@github.com:"]    insteadOf = https://github.com/


Agora, qualquer requisição para https://github.com/ será automaticamente substituída por SSH. Certifique-se de ter uma chave SSH configurada e adicionada à sua conta GitHub/GitLab.



Verificamos:

go get github.com/sua-org/repo-privado# Funciona sem erros!


Importante: este método altera o comportamento para todos os repositórios no GitHub. Se você precisar apenas de um, use uma configuração mais precisa:



[url "git@github.com:sua-org/"]    insteadOf = https://github.com/sua-org/


Método 2: .netrc para tokens e senhas



Se você prefere HTTPS (por exemplo, em CI/CD), use o arquivo ~/.netrc. O Go sabe ler este arquivo e inserir as credenciais.



Crie o arquivo ~/.netrc com permissões 600:



machine github.comlogin seu-usuario-githubpassword seu-personal-access-token


Onde obter o token? No GitHub: Settings → Developer settings → Personal access tokens → Generate new token. Selecione as permissões repo (para repositórios privados).



Depois disso:

go get github.com/sua-org/repo-privado


Para GitLab:

machine gitlab.comlogin seu-usuario-gitlabpassword seu-token-acesso-gitlab


Este método é ideal para CI/CD, onde chaves SSH nem sempre são fáceis de armazenar.



Método 3: GOPRIVATE — salva-vidas para módulos



A variável de ambiente GOPRIVATE diz ao Go: "Ei, esses módulos são privados, não tente verificá-los através do proxy público e não acesse suas páginas HTML". Isso resolve o problema de "repository not found".



Defina no terminal (ou adicione em ~/.bashrc / ~/.zshrc):



export GOPRIVATE=github.com/sua-org/*


Agora, o Go ignorará o proxy público de módulos (proxy.golang.org) para todos os repositórios da sua organização. O comando go get funcionará corretamente.

Blogs

Book Recommendations