Instalación de Go y primer programa: go run, go build y el toolchain

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.

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP