Go compila en segundos, produce un binario estático y no necesita runtime externo. Antes de escribir la primera línea de código hay que entender tres herramientas y dos conceptos del entorno. Esta guía te lleva desde la descarga hasta tener un proyecto real funcionando.
Instalar Go
Descarga el tarball desde go.dev/dl y extráelo en /usr/local:
wget https://go.dev/dl/go1.22.4.linux-amd64.tar.gz sudo tar -C /usr/local -xzf go1.22.4.linux-amd64.tar.gz
Añade Go al PATH en tu ~/.bashrc o ~/.zshrc:
export PATH=$PATH:/usr/local/go/bin
En macOS puedes usar Homebrew (brew install go) y en Windows el instalador .msi de la página oficial. Comprueba que funciona:
go version # go version go1.22.4 linux/amd64
GOROOT y GOPATH
GOROOT es donde vive la instalación de Go (habitualmente /usr/local/go). No necesitas tocarlo. GOPATH era el directorio de trabajo único que Go usaba antes de los módulos; hoy en día apenas importa salvo para guardar binarios instalados con go install:
go env GOROOT # /usr/local/go go env GOPATH # /home/tu_usuario/go
Crear un módulo y el primer programa
Con módulos (obligatorios desde Go 1.16) cada proyecto tiene su propio go.mod. Créalo con:
mkdir hola && cd hola go mod init ejemplo.com/hola
Ahora escribe el fichero main.go:
package main
import "fmt"
func main() {
fmt.Println("Hola, Go")
}
go run, go build y go install
Son tres formas de ejecutar código Go con propósitos distintos:
go run main.go compila en memoria y ejecuta al momento. Ideal para probar.go build -o hola . compila y genera un binario en el directorio actual. Lo distribuyes como un solo fichero.go install . compila y deja el binario en$GOPATH/bin, disponible en tu PATH.
go run main.go # Hola, Go go build -o hola . ./hola # Hola, Go go install . hola # Hola, Go (si $GOPATH/bin está en el PATH)
go.mod y go.sum
El fichero go.mod declara el módulo y la versión mínima de Go requerida:
module ejemplo.com/hola go 1.22
Cuando añades dependencias externas con go get, Go crea o actualiza go.sum con los hashes criptográficos de cada versión descargada. Este fichero garantiza que todos los desarrolladores y el CI usan exactamente los mismos bytes, aunque el repositorio externo cambie o desaparezca.
Por qué Go compila tan rápido
Go compila rápido por diseño. El compilador detecta ciclos de dependencia antes de empezar, no tiene cabeceras separadas de implementaciones y el lenguaje evita construcciones que requieran múltiples pasadas. Un proyecto de cien mil líneas suele compilar en menos de diez segundos en un portátil normal. El binario resultante incluye todo lo necesario para ejecutarse: no hay que instalar un runtime ni preocuparse por versiones de librerías en el servidor destino.
Estructura recomendada para empezar
hola/
??? go.mod
??? go.sum
??? main.go
??? internal/
??? saludo/
??? saludo.go
El directorio internal/ limita la visibilidad del código: solo puede importarlo el módulo que lo contiene. Es la forma más sencilla de separar el código público del privado sin crear un repositorio aparte.
