Introdução: Por que você pode precisar de um commit "ao vivo"
\nVocê já escreveu código em Go, adicionou uma biblioteca via go get e depois descobriu que o autor corrigiu um bug crítico, mas ainda não lançou uma nova tag (release)? Ou talvez você mesmo esteja desenvolvendo uma biblioteca e queira testá-la no seu projeto principal antes de publicar uma versão?
Nos módulos Go, há um recurso interessante: você pode especificar no go.mod não apenas um número de versão (v1.2.3), mas um commit específico do repositório Git. Isso permite trabalhar com a versão mais recente do código, mesmo que ela ainda não tenha sido empacotada em uma tag de release.
Este artigo é uma tradução e adaptação de uma das perguntas mais populares no Stack Overflow no mundo Go. Vamos explicar como fazer isso corretamente, quais são as armadilhas e como não quebrar sua build.
\n\nO que é go.mod e por que usar commits?
\ngo.mod é o arquivo que fica na raiz do seu projeto Go. Ele descreve todas as dependências (módulos) que sua aplicação precisa. Normalmente, as linhas se parecem com isso:
require (\n github.com/someuser/somelib v1.2.3\n)\nMas e se a funcionalidade que você precisa não estiver no v1.2.3, mas apenas no último commit do branch main? Em Go, isso é resolvido com pseudo-versões.
O que é uma pseudo-versão (pseudo-version)?
\nÉ uma string especial que substitui o número de versão normal. Ela consiste em:
\n- \n
- Versão base (se houver uma tag da qual o commit derivou) \n
- Timestamp do commit (no formato
yyyymmddhhmmss) \n - Hash do commit (primeiros 12 caracteres) \n
Exemplo: v0.0.0-20250320120000-abc123def456
Não se assuste com essa string longa — ela é quase sempre gerada pela própria ferramenta go.
Método nº 1: Usando go get com a flag @latest
\nEsta é a maneira mais simples e segura. Você simplesmente diz ao Go: "Pegue a versão mais recente do repositório".
\nPasso 1: Abra o terminal na raiz do seu projeto.
\nPasso 2: Execute o comando:
\ngo get github.com/someuser/somelib@latest\nDepois disso, o Go fará o seguinte:
\n- \n
- Baixará o último commit do branch padrão (geralmente
mainoumaster). \n - Gerará uma pseudo-versão. \n
- Atualizará automaticamente o
go.mode ogo.sum. \n
Resultado no go.mod:
require (\n github.com/someuser/somelib v0.0.0-20250320120000-abc123def456\n)\nPronto! Você acabou de vincular seu projeto ao commit mais recente.
\n\nSe precisar especificar um hash de commit específico
\nSe você souber o hash exato (por exemplo, abc123def456789), pode inseri-lo diretamente:
go get github.com/someuser/somelib@abc123def456789\nO Go o transformará em uma pseudo-versão.
\n\nMétodo nº 2: Edição manual do go.mod
\nÀs vezes, é necessário editar o arquivo manualmente (por exemplo, se não houver acesso ao terminal ou se você estiver escrevendo um script de CI).
\nPasso 1: Abra o go.mod em qualquer editor.
Passo 2: Encontre a linha com a dependência desejada e substitua a versão por latest ou por um hash específico.
require (\n github.com/someuser/somelib latest\n)\nPasso 3: Salve o arquivo e execute no terminal:
\ngo mod tidy\nO comando go mod tidy baixará as dependências ausentes, removerá as desnecessárias e substituirá a palavra latest pela pseudo-versão real.
Importante: Se você simplesmente escrever o hash manualmente (por exemplo, v0.0.0-abc123def456), o Go pode gerar um erro. É sempre melhor executar go mod tidy após edições manuais.