Setup moderno de Go: Olvidate del GOPATH y dominá Go Modules
Si estás pensando en meterte en el mundo de Go (o Golang), es muy probable que te encuentres con una montaña de tutoriales viejos que te hablan de configurar variables de entorno complejas, mover tus proyectos a carpetas específicas y pelearte con el famoso GOPATH.
Dejame decirte algo: todo eso ya es historia.
En este post, vamos a configurar un entorno de desarrollo moderno, limpio y profesional. Vamos a entender por qué el modelo de módulos cambió las reglas del juego, cómo instalar las herramientas correctamente y cómo gestionar tus binarios sin volverte loco. Este tutorial está pensado para desarrolladores que quieren empezar con el pie derecho, evitando vicios de hace cinco años que solo te van a traer dolores de cabeza.
¿Por qué Go es distinto? El cambio de paradigma
Antes de tirar comandos a la consola, tenés que entender qué cambió. Históricamente, Go funcionaba bajo un modelo donde todo tu código tenía que vivir dentro de una carpeta específica llamada $GOPATH/src. Si querías hacer un proyecto, no podías ponerlo en tu Documents o en un Desktop; tenías que meterlo sí o sí dentro de esa estructura. Esto era un dolor de cabeza para la gestión de dependencias y la colaboración.
Con la llegada de Go Modules, ese paradigma murió. Ahora podés crear tu proyecto en cualquier carpeta de tu máquina, y Go se encarga de gestionar las dependencias de forma aislada y declarativa, similar a como lo hace npm con package.json en Node.js o cargo en Rust.
1. Instalación limpia de Go
Lo primero es lo primero: instalar el binario. No te recomiendo usar los gestores de paquetes de tu distro de Linux (como apt) a menos que necesites una versión muy específica, porque suelen estar desactualizados. Lo ideal es ir directo a la fuente.
En macOS (usando Homebrew)
Si usás Mac, tenés la vida resuelta:
brew install goEn Linux y Windows
Lo mejor es descargar el instalador oficial desde go.dev/dl.
Una vez que termine la instalación, lo primero que tenés que hacer es verificar que tu terminal reconozca el comando. Abrí una nueva sesión de tu terminal y ejecutá:
go versionSalida esperada:
go version go1.22.1 linux/amd64 (o darwin/arm64 si es Mac)Configurando el PATH
Aunque Go Modules nos liberó del GOPATH, todavía necesitamos que nuestro sistema sepa dónde encontrar los binarios que instalemos con Go. Por eso, tenés que asegurarte de que el directorio bin de Go esté en tu variable de entorno PATH.
Agregá esto a tu archivo de configuración de shell (.zshrc o .bashrc):
export PATH=$PATH:$(go env GOPATH)/binPara verificar que el comando go env funciona y ver tu configuración actual, ejecutá:
go env GOPATH2. El fin de la era GOPATH: Bienvenidos a Go Modules
Acá es donde la mayoría de los que vienen de otros lenguajes se confunden. Vamos a hacer un ejercicio práctico para que veas la diferencia.
Creando un proyecto desde cero
Imaginá que querés crear un microservicio llamado api-server. No crees una carpeta llamada src dentro de tu home. Simplemente creá una carpeta donde vos quieras.
mkdir mi-proyecto-cool
cd mi-proyecto-coolAhora, el paso crucial. Para decirle a Go "che, este es un proyecto moderno y quiero que gestiones sus dependencias", ejecutamos:
go mod init github.com/tu-usuario/mi-proyecto-coolEste comando crea un archivo llamado go.mod. Este archivo es el corazón de tu proyecto; ahí se van a registrar todas las librerías que uses.
Salida esperada:
added go.modAgregando una dependencia
Supongamos que querés usar gin, un framework web muy popular. En lugar de ir a buscar el código a mano, simplemente hacés:
go get github.com/gin-gonic/gin¿Qué pasó acá?
- Go descargó la librería.
- Se actualizó tu archivo
go.modcon la versión de Gin. - Se creó un archivo
go.sum, que contiene los checksums para asegurar que nadie haya hackeado la librería y te esté mandando código malicioso. Nunca borres elgo.sum.
Ejemplo de código ejecutable
Vamos a crear un archivo main.go rápido para probar que todo esto funciona. Copiá este código en un archivo llamado main.go dentro de tu carpeta:
package main
import (
"fmt"
"github.com/gin-gonic/gin"
"net/http"
)
func main() {
// Creamos un router de Gin
r := gin.Default()
r.GET("/ping", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"message": "pong",
})
})
fmt.Println("Servidor corriendo en http://localhost:8080")
// En un entorno real usaríamos r.Run(), pero para el playground
// simulamos una respuesta rápida.
fmt.Println("Simulación de respuesta: {\"message\": \"pong\"}")
}Nota: En el entorno de ejecución del blog, el servidor de Gin no podrá levantar un puerto real, pero el código es perfectamente válido para tu máquina local.
3. go install: Instalando herramientas globales
Seguro escuchaste hablar de go install. Es una herramienta fundamental para instalar herramientas de CLI escritas en Go.
Si necesitás una herramienta como golangci-lint (un linter de altísima calidad), no descargás un .exe o un .deb. Simplemente ejecutás:
go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest¿Qué hace esto exactamente?
- Descarga el código fuente de la herramienta.
- Lo compila.
- Pone el binario resultante en
$(go env GOPATH)/bin.
Como configuramos el PATH en el paso 1, ahora podés ejecutar golangci-lint desde cualquier parte de tu terminal. Es una maravilla la limpieza que esto aporta.
Buenas prácticas y errores comunes
Para que no pases un mal rato, anotá estos consejos de alguien que ya rompió suficientes cosas:
✅ Lo que SÍ tenés que hacer
- Usar siempre
go mod init: No empieces un proyecto sin esto. Es la base de todo. - Commitear
go.modygo.sum: Estos archivos deben ir a tu repositorio de Git. Permiten que tus compañeros (o vos mismo en otro servidor) tengan exactamente las mismas versiones de las dependencias. - Usar
go mod tidy: Este comando es tu mejor amigo. Limpia el archivogo.mod, borra dependencias que ya no usás y agrega las que te faltan. Ejecutalo seguido.
❌ Lo que NO tenés que hacer
- No toques el
GOPATHmanualmente: No crees carpetassrcopkga mano para tus proyectos. Dejá que Go lo maneje. - No edites
go.suma mano: Si tenés un error de checksum, es porque algo falló en la descarga o la librería fue alterada. Uságo clean -modcachepara limpiar la caché y reintentar. - No uses versiones viejas: Go evoluciona rápido. Mantenete en las versiones estables más recientes para tener las mejores mejoras de performance y seguridad.
Conclusión
Configurar Go hoy en día es mucho más sencillo de lo que era hace unos años. Al entender que Go Modules es el estándar y que el GOPATH ahora es mayormente un lugar para guardar herramientas y caché, te ahorrás el 90% de los problemas de configuración inicial.
Resumen de tu nuevo workflow:
- Instalás Go.
- Agregás el directorio
binde Go a tuPATH. - Creás tu carpeta de proyecto.
- Ejecutás
go mod init <nombre>. - Usás
go getpara dependencias ygo installpara herramientas.
¡Listo! Ya tenés un entorno profesional. Ahora, lo único que te queda es empezar a escribir código. ¡A darle átomos!
DUGLAS MORENO
Comentarios (0)
Sé el primero en comentar.