Cuando instalas Go, lo que obtienes es el toolchain: un conjunto que incluye el compilador (gc), el gestor de módulos y herramientas de formateo como gofmt. La regla de oro es descargar siempre desde go.dev/dl/ y no desde el gestor de paquetes de tu sistema operativo. Los repositorios de apt, brew o winget suelen llevar semanas o meses de retraso respecto a las versiones oficiales, lo que te expone a errores de compilación inexplicables cuando intentas usar características modernas del lenguaje. Harás este proceso cada vez que configures un entorno nuevo o cuando un proyecto exija una versión exacta del compilador.

Linux (Debian/Ubuntu) — instalación desde la fuente oficial

# Linux (Debian/Ubuntu) — instalación desde la fuente oficial

# 1. Descarga el tarball oficial
#    Visita go.dev/dl/ para confirmar cuál es la latest stable antes de ejecutar esto
wget https://go.dev/dl/go1.23.4.linux-amd64.tar.gz

# 2. Elimina cualquier instalación previa
#    Si omites este paso y sobreescribes, puedes mezclar archivos de dos versiones
#    en /usr/local/go y terminar con un compilador en estado inconsistente
sudo rm -rf /usr/local/go

# 3. Extrae el toolchain en /usr/local
#    tar descomprime el directorio go/ directamente ahí,
#    resultando en la ruta /usr/local/go/bin/go
sudo tar -C /usr/local -xzf go1.23.4.linux-amd64.tar.gz

# 4. Registra el binario en tu PATH de forma permanente
echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc

# 5. Aplica el cambio en la sesión actual (sin esto tendrías que reabrir la terminal)
source ~/.bashrc

# 6. Verifica que el toolchain responde correctamente
go version
# Salida esperada: go version go1.23.4 linux/amd64

La lógica de instalación en macOS es idéntica, pero el nombre del archivo cambia según la arquitectura de tu equipo. Los Mac con chip Apple Silicon (M1, M2, M3, M4) usan darwin-arm64; los Mac Intel usan darwin-amd64. El shell por defecto desde macOS Catalina es zsh, así que el PATH se registra en ~/.zshrc en lugar de ~/.bashrc.

macOS — Apple Silicon (M1/M2/M3/M4)

# macOS — Apple Silicon (M1/M2/M3/M4)
curl -OL https://go.dev/dl/go1.23.4.darwin-arm64.tar.gz
sudo rm -rf /usr/local/go
sudo tar -C /usr/local -xzf go1.23.4.darwin-arm64.tar.gz
echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.zshrc
source ~/.zshrc
go version
# Salida esperada: go version go1.23.4 darwin/arm64

# macOS — Intel
curl -OL https://go.dev/dl/go1.23.4.darwin-amd64.tar.gz
sudo rm -rf /usr/local/go
sudo tar -C /usr/local -xzf go1.23.4.darwin-amd64.tar.gz
echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.zshrc
source ~/.zshrc
go version
# Salida esperada: go version go1.23.4 darwin/amd64

En Windows la instalación se delega a un instalador MSI que maneja el PATH automáticamente. La diferencia importante es que el cambio al PATH no es inmediato: el sistema lo aplica al abrir una nueva sesión de terminal, no en la que ya tienes abierta.

Windows — PowerShell como Administrador

# Windows — PowerShell como Administrador

# Opción A: instalador MSI (recomendada, sin retrasos de versión)
# Descarga go1.23.4.windows-amd64.msi desde go.dev/dl/ y ejecútalo.
# El instalador añade C:\Program Files\Go\bin al PATH del sistema de forma automática.

# Opción B: winget (más rápido, pero puede llevar retraso de versión)
winget install GoLang.Go

# En ambos casos: abre una terminal NUEVA antes de verificar.
# El PATH actualizado no existe en terminales que ya estaban abiertas.
go version
# Salida esperada: go version go1.23.4 windows/amd64

Una vez que tu versión principal está instalada, puedes añadir versiones secundarias sin tocar el toolchain del sistema. El mecanismo oficial consiste en descargar un pequeño ejecutable envoltorio que gestiona su propio toolchain de forma aislada en ~/sdk/.

# Gestión de versiones — funciona igual en Linux, macOS y Windows

# 1. Instala el ejecutable envoltorio para la versión que necesitas
#    Esto NO descarga el compilador todavía — solo el lanzador
go install golang.org/dl/go1.22.0@latest

# 2. Descarga el toolchain real de esa versión
#    Se almacena en ~/sdk/go1.22.0/ sin interferir con /usr/local/go
go1.22.0 download

# 3. Verifica que la versión secundaria responde
go1.22.0 version
# Salida esperada: go version go1.22.0 linux/amd64

# 4. Úsala de forma aislada para compilar un proyecto específico
cd /ruta/a/tu/proyecto
go1.22.0 build ./...
go1.22.0 test ./...

El error frecuente

En macOS, confiar en brew install go parece cómodo, pero los mantenedores de Homebrew no publican la nueva versión el mismo día que Google. Si un proyecto usa características introducidas en una versión que brew aún no tiene, verás errores que apuntan a tu código cuando el verdadero problema es tu entorno.

# Situación problemática
brew install go
# brew puede entregarte go1.21.x cuando ya existe go1.23.x

# Tu código usa range sobre entero, introducido en Go 1.22:
for i := range 10 {
    fmt.Println(i)
}
# El compilador de brew lo rechaza:
# cannot range over 10 (untyped int constant)

# Diagnóstico: compara tu versión instalada con la oficial
go version
# Luego visita go.dev/dl/ y confirma cuál es la latest stable

# Solución: desinstala la versión de brew para limpiar el PATH
brew uninstall go
# Luego instala desde la fuente oficial siguiendo los pasos de arriba

Si ves un error de sintaxis en código que debería ser válido, el primer reflejo siempre debe ser ejecutar go version y compararlo con la versión publicada en go.dev/dl/. La mayoría de los entornos rotos se resuelven en ese diagnóstico inicial.

6