¿Cómo especificar el último commit de un repositorio en go.mod? Guía

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Introducción: Por qué podrías necesitar un commit «vivo»

\n

¿Alguna vez has escrito código en Go, has añadido una biblioteca mediante go get, y luego has descubierto que su autor corrigió un error crítico, pero aún no ha publicado una nueva etiqueta (release)? ¿O quizás tú mismo estás desarrollando una biblioteca y quieres probarla en tu proyecto principal antes de publicar una versión?

\n

En los módulos de Go hay una característica genial: puedes especificar en go.mod no solo un número de versión (v1.2.3), sino un commit concreto del repositorio Git. Esto te permite trabajar con la versión más reciente del código, incluso si aún no está envuelta en una etiqueta de release.

\n

Este artículo es una traducción y adaptación de una de las preguntas más populares en Stack Overflow en el mundo de Go. Analizaremos cómo hacerlo correctamente, qué obstáculos hay y cómo no romper tu compilación.

\n\n

¿Qué es go.mod y para qué sirven los commits ahí?

\n

go.mod es un archivo que se encuentra en la raíz de tu proyecto Go. Describe todas las dependencias (módulos) que necesita tu aplicación. Normalmente, las líneas se ven así:

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

Pero, ¿qué pasa si la funcionalidad que necesitas no está en v1.2.3, sino solo en el último commit de la rama main? En Go, esto se resuelve con pseudoversiones.

\n\n

¿Qué es una pseudoversión (pseudo-version)?

\n

Es una cadena especial que reemplaza el número de versión normal. Se compone de:

\n
    \n
  • Una versión base (si existe una etiqueta de la que se bifurcó)
  • \n
  • La hora del commit (en formato yyyymmddhhmmss)
  • \n
  • El hash del commit (primeros 12 caracteres)
  • \n
\n

Ejemplo: v0.0.0-20250320120000-abc123def456

\n

No te asustes por esta larga cadena — casi siempre la genera la propia herramienta go.

\n\n

Método n.º 1: Usar go get con la bandera @latest

\n

Esta es la forma más sencilla y segura. Simplemente le dices a Go: «Toma la versión más reciente del repositorio».

\n

Paso 1: Abre la terminal en la raíz de tu proyecto.

\n

Paso 2: Ejecuta el comando:

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

Después de esto, Go hará lo siguiente:

\n
    \n
  • Descargará el último commit de la rama predeterminada (normalmente main o master).
  • \n
  • Generará una pseudoversión.
  • \n
  • Actualizará automáticamente go.mod y go.sum.
  • \n
\n

Resultado en go.mod:

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

¡Listo! Acabas de vincular tu proyecto al commit más reciente.

\n\n

Si necesitas especificar un hash de commit concreto

\n

Si conoces el hash exacto (por ejemplo, abc123def456789), puedes insertarlo directamente:

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

Go lo convertirá automáticamente en una pseudoversión.

\n\n

Método n.º 2: Edición manual de go.mod

\n

A veces es necesario editar el archivo manualmente (por ejemplo, si no tienes acceso a la terminal o estás escribiendo un script de CI).

\n

Paso 1: Abre go.mod en cualquier editor.

\n

Paso 2: Encuentra la línea con la dependencia deseada y reemplaza la versión por latest o por un hash concreto.

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

Paso 3: Guarda el archivo y ejecuta en la terminal:

\n
go mod tidy
\n

El comando go mod tidy descargará las dependencias faltantes, eliminará las innecesarias y reemplazará la palabra latest por una pseudoversión real.

\n

Importante: Si simplemente escribes el hash manualmente (por ejemplo, v0.0.0-abc123def456), Go podría mostrar un error. Es mejor ejecutar siempre go mod tidy después de ediciones manuales.

Blogs

Book Recommendations