Go: El arma del desarrollo multiplataforma que no has valorado

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Go: Cómo olvidar el "En mi máquina funciona" y empezar a conquistar mundos

\n\n

¿Alguna vez has escrito un script genial en Python, se lo has enviado a un amigo con Windows y te ha respondido: "No me funciona, no tengo instalado Python"? ¿Te suena familiar? Bienvenido al infierno de las dependencias, los entornos virtuales y las versiones de intérpretes. Ahora imagina: escribes el código una vez, pulsas un botón y obtienes un binario que funciona en Windows, Linux y macOS sin necesidad de instalar nada. Sin Python, sin Node, sin JVM.

\n\n

Esto no es ciencia ficción. Esto es el desarrollo multiplataforma con Go: un lenguaje que fue creado precisamente para resolver estos problemas. Si programas en Python y estás harto de los bailes con las dependencias, o si simplemente buscas una herramienta para crear utilidades rápidas y portables, Go se convertirá en tu nuevo mejor amigo. En este artículo no nos andaremos con rodeos. Analizaremos ejemplos reales, mostraremos código y te contaremos cómo hacer que tu programa funcione en cualquier lugar donde haya un procesador.

\n\n

¿Por qué Go es la elección ideal para la multiplataforma?

\n\n

En el mundo de Golang multiplataforma, esto no es una característica, sino la base. A diferencia de Python, que requiere un intérprete, o de Java, que necesita una máquina virtual, Go se compila a código máquina nativo. Esto significa que tu binario contiene todo lo necesario para funcionar: el runtime, el recolector de basura y tu código. Sin bibliotecas externas, sin "pip install". Lo descargas y lo ejecutas.

\n\n

Pero lo principal es la compilación cruzada de Go. Estás en un MacBook, escribes código y luego, con un solo comando, compilas un archivo ejecutable para Windows, Linux, Raspberry Pi (ARM) o incluso para un antiguo FreeBSD. No necesitas una máquina virtual ni Docker para compilar. Una variable de entorno y listo.

\n\n

Para un desarrollador de Python, esto suena a magia, pero es simplemente Go. Pasemos a la práctica.

\n\n

Escribimos una utilidad multiplataforma en Go

\n\n

Imaginemos que necesitamos escribir un programa simple pero útil: que recoja información del sistema (SO, arquitectura, nombre de host) y la guarde en un archivo JSON. Esta es una tarea clásica para DevOps o administradores de sistemas. En Python tendrías que arrastrar platform y json, pero en Go resulta aún más elegante.

\n\n

Paso 1: Estructura e importación

\n\n

Crea un archivo main.go. Lo primero que haremos será definir la estructura de datos y usar los paquetes runtime y os para obtener información del sistema. Observa: runtime.GOOS y runtime.GOARCH son constantes integradas que Go conoce ya en tiempo de compilación.

\n\n
package main\n\nimport (\n    "encoding/json"\n    "fmt"\n    "os"\n    "runtime"\n)\n\ntype SystemInfo struct {\n    OS         string `json:"os"`\n    Arch       string `json:"arch"`\n    Hostname   string `json:"hostname"`\n    GoVersion  string `json:"go_version"`\n}
\n\n

Paso 2: Recopilación de información

\n\n

Ahora escribamos una función que recoja los datos. Usaremos os.Hostname() — es multiplataforma y funciona en todos los sistemas.

\n\n
func getSystemInfo() (SystemInfo, error) {\n    hostname, err := os.Hostname()\n    if err != nil {\n        return SystemInfo{}, fmt.Errorf("error al obtener el hostname: %w", err)\n    }\n\n    return SystemInfo{\n        OS:        runtime.GOOS,\n        Arch:      runtime.GOARCH,\n        Hostname:  hostname,\n        GoVersion: runtime.Version(),\n    }, nil\n}
\n\n

Paso 3: Escritura en JSON

\n\n

Completemos nuestro programa: obtenemos la información, la codificamos en JSON y la escribimos en un archivo. También añadiremos manejo de errores, algo de buena educación en el desarrollo multiplataforma con Go, ya que las rutas de archivos difieren en los distintos SO.

\n\n
func main() {\n    info, err := getSystemInfo()\n    if err != nil {\n        fmt.Printf("Error: %v\\n", err)\n        os.Exit(1)\n    }\n\n                

Blogs

Book Recommendations