Uso de GoModules para Gestión de Dependencias en Go
Resumen
Gestionar dependencias en Go fue durante años un verdadero dolor de cabeza. El código debía vivir obligatoriamente dentro del code path del sistema, y llevar aplicaciones a producción con librerías externas resultaba casi imposible en ciertas plataformas. Go Modules llegó entre 2018 y 2019 para resolver estos problemas de raíz, ofreciendo un entorno completo para instalar, versionar y verificar paquetes de terceros sin restricciones de ubicación.
¿Qué problemas resolvió Go Modules en el desarrollo con Go?
Antes de Go Modules, existían dos limitaciones críticas. La primera: todo el código debía residir en la carpeta $HOME/usuario/go, conocida como el Go path. La segunda: al momento de desplegar a producción, muchas plataformas solo aceptaban código binario o de ejecución, sin opción de instalar dependencias externas [0:22]. Esto significaba que si necesitabas un framework web, quedabas atado a las librerías nativas del lenguaje o a plataformas muy específicas.
Go Modules (comúnmente llamado Go Mods) no solo eliminó estas restricciones, sino que creó un ecosistema donde instalar y administrar librerías de terceros se volvió un proceso sencillo y estandarizado [1:10].
¿Cómo instalar un paquete externo con Go Modules?
Para ilustrar el flujo completo se utiliza Echo, un framework de desarrollo web para Go que destaca por su rendimiento y facilidad de uso [1:25].
¿Cómo se descarga e inicializa un módulo?
El comando go get es el manejador de paquetes de Go. Para instalar Echo se ejecuta:
bash
go get -v -u github.com/labstack/echo/v3
La bandera -v activa la verbosidad, mostrando el progreso de la descarga.
La bandera -u fuerza la actualización aunque el paquete ya esté instalado [2:28].
Una vez descargado, se inicializa el módulo del proyecto con:
bash
go mod init github.com/tuusuario/tu-repositorio
Aunque podrías usar solo el nombre de la carpeta, la buena práctica es colocar el path completo incluyendo github.com, tu usuario y el nombre del repositorio [3:15]. Esto evita conflictos cuando otros desarrolladores descarguen tu código.
Este comando genera el archivo go.mod, que contiene el nombre del módulo y la versión de Go utilizada. No se recomienda editarlo manualmente; Go provee su propia interfaz a través del comando go mod para interactuar con él [4:02].
¿Cómo crear un servidor web básico con Echo?
El Hello World con Echo sigue una estructura clara:
e.GET("/", ...) define la ruta root, la primera que se carga al ingresar a la página.
Se utiliza una función anónima que recibe un echo.Context y retorna un error [5:05].
http.StatusOK envía el código de estado 200.
e.Start(":1323") levanta el servidor en el puerto indicado [5:52].
Al ejecutar go run src/main.go, Go Modules importa automáticamente todos los paquetes necesarios. Visitando localhost:1323 en el navegador, el servidor responde con "Hello World" [6:25].
¿Dónde se almacenan los módulos descargados y cómo verificarlos?
Los paquetes descargados se guardan dentro de la carpeta $GOPATH/pkg/mod/. Navegando por esta estructura puedes encontrar las distintas versiones de cada librería [7:10]. En el caso de Echo, el archivo go.mod del proyecto indica exactamente qué versión se está utilizando, por ejemplo v3.3.10 [7:50].
Estos archivos son de solo lectura. Si por alguna razón necesitas experimentar o modificar alguno, es fundamental hacer un respaldo previo. Tras cualquier cambio, el comando:
bash
go mod verify
comprueba la integridad de todos los módulos descargados y confirma que se encuentran en estado sano [8:55]. Esta verificación es esencial para garantizar que las dependencias no han sido alteradas de forma inesperada.
Cuando necesitas hacer ediciones específicas sobre una librería de terceros para adaptarla a tu proyecto, existe un mecanismo correcto para hacerlo sin comprometer la integridad del paquete original. ¿Conoces alguna otra forma de gestionar dependencias en Go? Comparte tu experiencia en los comentarios.
También está mal editado, quitaron la parte en la que edita el módulo :(
Hola! Gracias por el reporte, vamos a reportarlo al equipo :D
😦
cuando usas god mods no es necesario estar en el GOPATH, god mods nos permite inicializar y/o trabajar nuestro proyecto en cualquier parte de nuestro equipo, no importa si estas en
Documents o en algun otro sitio, esta caracteristica fue pedida por la comunidad dado que algunos no se sentian tan comodos al estar obligados a trabajar en el GOPATH
Esta es la guía de instalación, ya que no la agregaron en el apartado de recursos.
No se si a todos le habrá pasado, pero al ejecutar como está en la clase, no funcionaba, pero siguiendo la guía de esta web https://echo.labstack.com/guide/ funciona.
Quizas no lo noten, pero aqui primero ejecutan go get, luego go mod init, y en la guía de la web lo hacen al reves
Confirmo, lo mejor es seguir las guías oficiales ;)
Comprendo lo que dicen sobre las documentaciones oficiales, pero entonces... para que pagamos platzi, pagamos una academia para tener el mejor contenido, no irnos a un youtube a buscar lo gratuito, si usted siente la necesidad o bien para entender una clase tiene que irse a otro lugar para buscar informacion, eso solo significa que este contenido no esta bien eleborado, el curso esta bastante deficiente.
En mi opinion, el problema de editar codigo de modulos externos (Echo, en este caso), es que viola uno de los 12 factores (cuyo autor si no me equivoco es un ingeniero de Heroku). La razon es porque el codigo ahora ya no esta en repositorios, sino que esta en tu maquina. Cuando quieras escalar la app en muchos servidores, habria problemas para traer ese mismo codigo a todas esas maquinas (ya que el paquete esta referenciando un repositorio en Github). Una solucion es: hacer un fork de Echo, modificarlo, hacer push, y luego usar ese fork como modulo externo.
ok, en el video siguiente sale otra forma.
A mi me sirvió instalar así
go install -v github.com/labstack/echo/v4@latest
¿Hay forma de asilar las dependencias como los virtuales envs en Python?
Hola! No tengo mucha experiencia con python, sin embargo en el mundo de node.js existe una herramienta para terminal llamada nvm, esta permite instalar en tu sistema la version de node que desees, incluso tener varias versiones a la vez y puedes especificar cual version usar en tus proyectos creando un archivo llamado .nvmrc y escribiendo dentro la versión.
En el mundo de GO hasta donde yo conozco existen GVM y GOUP que es el que yo utilizo, puedes tener varias versiones instaladas con ambos, sin embargo no tienen un archivo como en nvm para especificar cual version usar.
Es una pena que aun no esten tan maduras estas herramientas como en otros lenguajes, pero espero haberte ayudado.
Primero inicializar le modulo con go mod init myapp
Instalar el módulo con go get -u -v github.com/labstack/echo/v4
Para habilitar el módulo, debe ejecutar este comando export GO111MODULE=on
Tuve que hacerlo de esta forma, para que funcionara con WSL
go get -v -u github.com/labstack/echo
Un pequeño instructivo de este video:
/** Go modules:
To install 3rd party libraries: Echo - In this case
https://echo.labstack.com/guide/
1.- Run: $ go get github.com/labstack/echo/v4
2.- If you need to watch a great change into a message server:
2.1.- Move to $GOPATH and open:
$ cd pkg/mod/github.com/labstack/echo/v4@v4.6.1
Make a copy of your echo.go => $ cp echo.go ..
Open this file (VSCode in this case): code echo.go
Look for this message and add your own code:
____ __
/ __/___/ / ___
/ _// __/ _ \/ _ \
/___/\__/_//_/\___/ %s
High performance, minimalist Go web framework
That's it! Don't forget to overwrite the change
3.- Go back to main.go of your project and run
$ go mod verify
$ go run src/main.go
**/