Cómo funciona Go (Golang): Compilación, concurrencia, memoria y runtime
Go (Golang) es un lenguaje compilado tipado estáticamente diseñado en Google (2007, de código abierto 2009) por Robert Griesemer, Rob Pike, Ken Thompson. No es "Gopher" — ese es la mascota.
1. Canalización de compilación
.go source → go build → SSA IR → Machine Code (ELF/Mach-O/PE) → Static Binary
- Sin VM, sin intérprete. Binario único = implementación fácil.
- Compilación rápida: ~1M líneas/seg (Go 1.22+).
- Compilación cruzada: `GOOS=linux GOARCH=amd64 go build` — sin instalar toolchain en el objetivo.
2. Sistema de tipos
- Estático, estructural (interfaces satisfechas implícitamente), sin herencia.
- Genéricos (desde 1.18): parámetros de tipo, restricciones.
- Valores cero: `var x int` → 0; `var s string` → ""; `var p *T` → nil.
3. Gestión de memoria
- Análisis de escape (tiempo de compilación): decide asignación heap vs pila.
- Recolector de basura: Concurrente, marca-barrido tricolor, no generacional, baja latencia (<1 ms típico). Ajustable `GOGC`.
- Sin `free` manual — pero `sync.Pool` para reutilización de objetos.
4. Concurrencia (modelo CSP)
- Goroutines: Hilos verdes (pila de 2 KB, crece/encoge). Millones posibles.
- Canales: Tipados, síncronos (sin búfer) o asíncronos (con búfer). `select` para multiplexación.
- Paquete sync: Mutex, RWMutex, WaitGroup, Once, Cond, Map.
- Sin seguridad de carrera de datos — `go run -race` detecta en tiempo de ejecución.
5. Runtime
- Programador: M:N (M hilos de SO, N goroutines). Robo de trabajo.
- Sysmon: Preemptión, ritmo de GC, netpoll.
- Vdso, preemptión asíncrona (1.14+), montón de temporizadores.
6. Biblioteca estándar (Baterías incluidas)
- net/http (servidor/cliente de nivel productivo), crypto/tls, json, html/template, database/sql, testing, embed, time, context, sync, atomic, regexp, sort, flag, log/slog.
7. Herramientas
- `go fmt` / `go vet` / `go test -race` / `go doc` / `go mod` / `go work` / `pprof` / `trace`.
- LSP: gopls (VS Code, GoLand, Neovim).
Casos de uso típicos
- Microservicios cloud-native (Kubernetes, Docker, etcd, Prometheus escritos en Go).
- Herramientas CLI (Hugo, Terraform, kubectl, fzf).
- Servicios de red de alto rendimiento (Cloudflare, Uber, Twitch, Dropbox).
- Borde / WASM (TinyGo).
Go intercambia expresividad por simplicidad, velocidad de compilación, implementabilidad y rendimiento de concurrencia. Es el lenguaje de la infraestructura moderna.
- ·¿Qué significa "LM" en el regulador de voltaje LM7805?
- ·Megaohms vs. Kiloohms: La Diferencia de Prefijos Métricos
- ·Cómo acceder a la intranet de YTI desde casa: guía de VPN y portal
- ·¿Qué Es el "Circuito X50J"? Entendiendo Designaciones No Estándar
- ·Ohms Infinitos: El Concepto de Resistencia en Circuito Abierto
- ·Cómo omitir (bypass) el sintonizador Pioneer Inno XM para usar radio normal
- ·El "Lado de Línea" del Aire Acondicionado Central = Circuito de Refrigerante de Alta Presión
- ·Cómo instalar XM Onyx paso a paso
- El ascenso y caída de Xtranormal: Un pionero en la animación 3D DIY
- Qué significa "XM Ready" en un equipo de audio
- Ley de Ohm: ¿Verdad Universal o Aproximación Conveniente?
- Comparando Resistencia: 5 Ω vs. 1000 Ω
- Conversión de -46 dBm a Milivatios: Cálculo de Potencia RF
- Cómo amplificar la señal XM hasta el receptor principal
