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?
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.
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í?
\ngo.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í:
require (\n github.com/someuser/somelib v1.2.3\n)\nPero, ¿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.
¿Qué es una pseudoversión (pseudo-version)?
\nEs 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
Ejemplo: v0.0.0-20250320120000-abc123def456
No te asustes por esta larga cadena — casi siempre la genera la propia herramienta go.
Método n.º 1: Usar go get con la bandera @latest
\nEsta es la forma más sencilla y segura. Simplemente le dices a Go: «Toma la versión más reciente del repositorio».
\nPaso 1: Abre la terminal en la raíz de tu proyecto.
\nPaso 2: Ejecuta el comando:
\ngo get github.com/someuser/somelib@latest\nDespués de esto, Go hará lo siguiente:
\n- \n
- Descargará el último commit de la rama predeterminada (normalmente
mainomaster). \n - Generará una pseudoversión. \n
- Actualizará automáticamente
go.modygo.sum. \n
Resultado en go.mod:
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\nSi necesitas especificar un hash de commit concreto
\nSi conoces el hash exacto (por ejemplo, abc123def456789), puedes insertarlo directamente:
go get github.com/someuser/somelib@abc123def456789\nGo lo convertirá automáticamente en una pseudoversión.
\n\nMétodo n.º 2: Edición manual de go.mod
\nA veces es necesario editar el archivo manualmente (por ejemplo, si no tienes acceso a la terminal o estás escribiendo un script de CI).
\nPaso 1: Abre go.mod en cualquier editor.
Paso 2: Encuentra la línea con la dependencia deseada y reemplaza la versión por latest o por un hash concreto.
require (\n github.com/someuser/somelib latest\n)\nPaso 3: Guarda el archivo y ejecuta en la terminal:
\ngo mod tidy\nEl comando go mod tidy descargará las dependencias faltantes, eliminará las innecesarias y reemplazará la palabra latest por una pseudoversión real.
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.