Hola Mundo en Go

El Hola Mundo de Go son siete líneas, y cada una tiene un motivo. Lo que ha cambiado desde que se escribió esta página no es el código, sino cómo se organiza un proyecto: hoy todo empieza con go mod init.

El programa

package main

import "fmt"

func main() {
	fmt.Println("Hola Mundo")
}
LíneaQué significa
package maineste archivo es un programa, no una biblioteca
import "fmt"el paquete de la biblioteca estándar para escribir y dar formato
func main()por donde empieza el programa; no recibe ni devuelve nada
fmt.Printlnescribe y añade un salto de línea; la mayúscula inicial significa que es pública

Dos reglas de Go que se ven ya aquí: la llave de apertura va en la misma línea que la función —si la bajas, no compila—, y un import que no se usa también es un error de compilación, no un aviso.

El módulo

mkdir hola && cd hola
go mod init ejemplo/hola
salidago: creating new go.mod: module ejemplo/hola
go.modmodule ejemplo/hola

go 1.27.2

El go.mod dice cómo se llama tu módulo y con qué versión de Go se escribió. Sin él, Go no sabe qué está compilando:

salidago: go.mod file not found in current directory or any parent directory; see 'go help modules'
La versión anterior de esta página ejecutaba go run src/ejemplos/Main.go, con una carpeta src. Era el modo antiguo, el GOPATH, en el que todos los proyectos tenían que vivir dentro de una carpeta concreta. Desde Go 1.16 los módulos son lo normal y el proyecto puede estar donde quieras.

Ejecutar o compilar

go run .
go build -o hola .
./hola
salidaHola Mundo
2.3M hola

go run . compila en una carpeta temporal y ejecuta: para probar. go build deja un ejecutable de 2,3 MB que funciona solo, sin instalar Go ni nada más en la máquina donde lo lleves. Es la razón por la que tantas herramientas de línea de órdenes están escritas en Go.

Compilar para otro sistema

GOOS=windows GOARCH=amd64 go build -o hola.exe .
salida2.4M hola.exe

Desde Linux, un ejecutable de Windows. Sin instalar nada. Los dos primeros bytes del archivo son MZ, la firma de los ejecutables de Windows. Con GOOS=darwin sale uno para macOS, y con GOARCH=arm64, para procesadores ARM, como los de una Raspberry Pi o los Mac recientes.

Más información en inglés: Hello World in Golang.

Todo el código se compiló y se ejecutó con Go 1.27 en un contenedor limpio antes de publicar esta página; las salidas están copiadas de esa ejecución.