🔥 DESPLIEGUE DE LA APLICACIÓN, REDUCIR DIMENSIÓN DEL COMPILADO

¿Cómo optimizar el despliegue de una aplicación Go y reducir el tamaño del binario?

Cuando se trata de cómo reducir el tamaño del ejecutable en Go, es importante recordar que Go permite compilar aplicaciones sin requerir dependencias externas, incluso si el destino es otro sistema operativo. Esto representa una ventaja significativa frente a otros lenguajes como PHP o Python, donde es necesario instalar intérpretes y librerías adicionales. En Go, basta con el archivo binario generado para ejecutar la aplicación.

Por ejemplo, al compilar tu proyecto con el comando:

$ go build main.go

Obtendrás un resultado similar al siguiente:

$ ls -la
-rwxr-xr-x    1 username  userid   2.0M Aug 28 23:51 main
-rw-r--r--    1 username  userid   241B Aug 21 22:33 main.go

En este caso, el binario ocupa 2 MB, aunque el código fuente sea pequeño. Esto ocurre porque Go incluye en el ejecutable todo lo necesario para su funcionamiento, como el runtime, lo que lo diferencia de otros lenguajes interpretados. Si buscas optimizar binarios de Go para producción, puedes emplear ciertos parámetros al compilar para eliminar información innecesaria, como símbolos de depuración y tablas DWARF, que no son requeridas en un entorno de lanzamiento.

Para ello, utiliza:

$ go build -ldflags="-s -w" main.go
$ ls -lh
-rwxr-xr-x  1 username  userid   1.6M Aug 28 23:59 main
-rw-r--r--  1 username  userid   241B Aug 21 22:33 main.go

El tamaño del archivo se reduce de 2 MB a 1.6 MB.

Si necesitas aplicar mejores prácticas para desplegar aplicaciones Go en entornos con recursos limitados, como dispositivos IoT, es fundamental minimizar aún más el tamaño del binario. En estos casos, puedes recurrir a herramientas especializadas para comprimir ejecutables.

Una opción recomendada es UPX, que permite comprimir binarios de manera eficiente:

$ upx main
                       Ultimate Packer for eXecutables
                          Copyright (C) 1996 - 2018
UPX 3.95        Markus Oberhumer, Laszlo Molnar & John Reiser   Aug 26th 2018

        File size         Ratio      Format      Name
   --------------------   ------   -----------   -----------
   1657896 ->    622608   37.55%   macho/amd64   main

Packed 1 file.

UPX logra una compresión del 37.55% en la aplicación.

$ ls -lh
-rwxr-xr-x    1 username  userid   608K Aug 28 23:59 main
-rw-r--r--    1 username  userid   241B Aug 21 22:33 main.go

El tamaño final del ejecutable es de solo 608 KB.

Si tu objetivo es compilar programas Go para sistemas embebidos, la reducción del tamaño es aún más relevante, ya que estos dispositivos suelen tener almacenamiento muy limitado. Sin embargo, en servidores web o entornos con suficiente capacidad, comprimir el binario no siempre es necesario.

Herramientas para comprimir ejecutables en Go

A continuación se muestra una tabla con algunas de las herramientas más utilizadas para comprimir binarios generados con Go:

Herramienta Descripción breve Ahorro promedio (%)
UPX Compresor de ejecutables multiplataforma, muy eficiente y ampliamente usado para reducir el tamaño de binarios. 40-60%
strip Utilidad estándar en sistemas Unix para eliminar símbolos de depuración y reducir el tamaño de los ejecutables. 10-20%
gzexe Script que comprime ejecutables usando gzip, útil para ahorrar espacio aunque menos eficiente que UPX. 30-50%

Como se observa, herramientas como UPX ofrecen el mayor ahorro de espacio, mientras que strip y gzexe también pueden ser útiles dependiendo del contexto. La elección de la herramienta adecuada dependerá de las necesidades de compresión y compatibilidad de cada proyecto.


Conclusión

La optimización del despliegue en Go no solo depende de compilar correctamente, sino también de elegir la herramienta de compresión más adecuada según el contexto. UPX destaca por ofrecer el mayor ahorro de espacio, mientras que strip y gzexe pueden ser útiles en situaciones específicas. Analizar las necesidades de almacenamiento, compatibilidad y portabilidad permitirá seleccionar la mejor opción para cada proyecto. Adoptar estas prácticas facilita el despliegue en entornos con recursos limitados y contribuye a una gestión más eficiente de las aplicaciones Go.


Cuestionario de repaso

  1. ¿Por qué los binarios de Go suelen ser más grandes que el código fuente?
  2. ¿Qué parámetros y herramientas ayudan a reducir el tamaño del ejecutable en Go?
  3. ¿Qué ventajas y desventajas presentan UPX, strip y gzexe para comprimir binarios?
  4. ¿Cómo elegir la herramienta de compresión más adecuada según el contexto de uso?
  5. ¿En qué situaciones no es necesario comprimir el binario de una aplicación Go?