Como especificar o último commit de um repositório no go.mod? Guia

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

Introdução: Por que você pode precisar de um commit "ao vivo"

\n

Você 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?

\n

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.

\n

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\n

O que é go.mod e por que usar commits?

\n

go.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:

\n
require (\n    github.com/someuser/somelib v1.2.3\n)
\n

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

\n\n

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
\n

Exemplo: v0.0.0-20250320120000-abc123def456

\n

Não se assuste com essa string longa — ela é quase sempre gerada pela própria ferramenta go.

\n\n

Método nº 1: Usando go get com a flag @latest

\n

Esta é a maneira mais simples e segura. Você simplesmente diz ao Go: "Pegue a versão mais recente do repositório".

\n

Passo 1: Abra o terminal na raiz do seu projeto.

\n

Passo 2: Execute o comando:

\n
go get github.com/someuser/somelib@latest
\n

Depois disso, o Go fará o seguinte:

\n
    \n
  • Baixará o último commit do branch padrão (geralmente main ou master).
  • \n
  • Gerará uma pseudo-versão.
  • \n
  • Atualizará automaticamente o go.mod e o go.sum.
  • \n
\n

Resultado no go.mod:

\n
require (\n    github.com/someuser/somelib v0.0.0-20250320120000-abc123def456\n)
\n

Pronto! Você acabou de vincular seu projeto ao commit mais recente.

\n\n

Se precisar especificar um hash de commit específico

\n

Se você souber o hash exato (por exemplo, abc123def456789), pode inseri-lo diretamente:

\n
go get github.com/someuser/somelib@abc123def456789
\n

O Go o transformará em uma pseudo-versão.

\n\n

Mé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).

\n

Passo 1: Abra o go.mod em qualquer editor.

\n

Passo 2: Encontre a linha com a dependência desejada e substitua a versão por latest ou por um hash específico.

\n
require (\n    github.com/someuser/somelib latest\n)
\n

Passo 3: Salve o arquivo e execute no terminal:

\n
go mod tidy
\n

O comando go mod tidy baixará as dependências ausentes, removerá as desnecessárias e substituirá a palavra latest pela pseudo-versão real.

\n

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.

Blogs

Book Recommendations