Despliegue de la Aplicaci贸n, Reducir dimensi贸n del compilado Despliegue de la Aplicaci贸n, Reducir dimensi贸n del compilado

馃 Despliegue de la Aplicaci贸n, Reducir dimensi贸n del compilado

馃嵖 驴C贸mo reducir el tama帽o de un programa compilado en Go?

Como se menciono, no se requieren dependencias para producir un archivo compilado en Go, incluso si este es para un sistema operativo diferente.

A diferencia de otros lenguajes como PHP o Python en donde se requiere tener el interprete y las librer铆as instaladas, para ejecutar una aplicaci贸n en Go todo lo que se necesita es tener el archivo compilado.

Supongamos que compilamos nuestra aplicaci贸n.

$ go build main.go

Esto va a generar un resultado con las siguientes caracter铆sticas.

$ 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 el ejemplo anterior el archivo compilado pesa 2 MB, a煤n y cuando apenas contiene algunas l铆neas. Esto se debe a que Go requiere incluir dentro del compilado todo lo requerido por el programa para ser ejecutado, incluyendo el run-time de Go. A diferencia de PHP o Python en donde este interprete es instalado en el servidor.

Para reducir el tama帽o de un programa compilado en Go, algunos par谩metros adicionales pueden ser especificados cuando se ejecuta el compilador. Estos par谩metros permiten ignorar la tabla de s铆mbolos, informaci贸n de depuraci贸n, y la tabla de s铆mbolos DWARF. Estas no son necesarias al momento de generar un release.

$ 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 archivo se ha reducido de 2M a 1.6.

Existen casos en los que es necesario reducir aun mas el tama帽o del compilado, como los dispositivos IoT (Internet Of Things) como Arduino o el Raspberry, que carecen de una cantidad significativa de espacio para almacenar aplicaciones. Para estos casos se puede hacer uso de la herramienta upx https://upx.github.io/, que permite una compresi贸n adicional.

$ 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 ha podido realizar una compresi贸n del 37.55% de 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 compilado es de solo 608K.

Si bien en un ambiente IoT el tama帽o del compilado es importante, en otras situaciones comprimir el compilado no es necesario. Un ejemplo de esto son los servidores web, que almacenan cantidades bastante considerables de informaci贸n.

Despliegue de la Aplicaci贸n, Compilaci贸n Despliegue de la Aplicaci贸n, Go get
comments powered by Disqus