// 09 · siete apps reales, archivo por archivo

Qué se construye con Go

Los siete tipos de aplicación donde Go domina, cada uno como un mini-proyecto completo: navega el árbol, abre cada archivo y lee el código. Todos compilan tal cual.

01 · API REST

el caso de uso #1

El pan de cada día: una API de tareas con la stdlib pura (Go 1.22+), store en memoria protegido con mutex, middleware de logging, graceful shutdown, test de integración con httptest y Dockerfile de producción. Es tu proyecto Spring Boot, completo, en ~180 líneas y sin una sola dependencia externa.

net/httplog/slogencoding/jsonhttptesten producción: + chi o Gin

02 · Herramienta CLI

donde Go no tiene rival

Docker, kubectl, terraform, gh: todas las CLIs que usas están escritas en Go, porque un binario único sin runtime es la distribución perfecta. Esta es gostats: recorre un directorio y cuenta líneas de código por extensión. Flags nativos, recorrido de archivos con filepath.WalkDir y reporte formateado.

flagpath/filepathbufiopara CLIs grandes: + cobra

03 · Worker / procesador de colas

concurrencia aplicada

El patrón productor-consumidor que en Java montarías con ExecutorService + BlockingQueue, aquí en su forma natural: un pool de workers reutilizable con canales, contexto con timeout y recolección de errores. Cambia el envío de correos simulado por llamadas a RabbitMQ/Kafka/SQS y tienes un consumer de producción.

goroutineschannelscontextsyncen producción: + asynq, watermill

04 · Web app con server-side rendering

html/template + embed

No todo necesita React: Go renderiza HTML en el servidor con templates seguros (escapan XSS por defecto) y //go:embed mete plantillas y CSS dentro del binario — la app entera, assets incluidos, es un solo archivo ejecutable. Combínalo con htmx y tienes interactividad sin bundle de JavaScript.

html/templateembednet/httpcombo moderno: + htmx / templ

05 · Microservicio gRPC

servicio-a-servicio

Para comunicación interna entre microservicios, gRPC + Protocol Buffers es el estándar en el mundo Go (y el que usan Kubernetes y compañía): contratos tipados, streaming bidireccional y ~10x menos overhead que JSON. Defines el contrato en .proto, protoc genera el código, y tú solo implementas la interfaz.

google.golang.org/grpcprotobufalternativa moderna: connectrpc

06 · Scraper / bot concurrente

Python te va a perdonar

Donde en Python harías requests + BeautifulSoup secuencial, Go descarga N fuentes en paralelo con un semáforo de canales que limita la concurrencia. goquery te da selectores jQuery sobre el HTML. El mismo patrón sirve para health-checkers, agregadores de precios y bots de monitoreo.

net/httpgoquerycontextsync

07 · Chat en tiempo real (WebSockets)

nuevo · el patrón hub

El ejemplo canónico de "compartir comunicando": un hub central corre en una sola goroutine y gestiona todo el estado (clientes conectados, difusión de mensajes) a través de canales — cero mutex. Cada cliente son dos goroutines: una bombea mensajes del navegador al hub, otra del hub al navegador. Con este patrón, 10.000 usuarios conectados son normalidad, no hazaña.

gorilla/websocketchannelsselectembed
¿Y qué NO conviene construir en Go?
  • Frontends ricos — ahí sigue ganando tu React; Go los sirve y les da la API.
  • Apps móviles — Flutter sigue siendo tu herramienta; Go puede ser el backend (y con gomobile hay nichos, pero no es el camino feliz).
  • Data science / ML — el ecosistema de Python (pandas, pytorch) no tiene rival; Go entra en la fase de servir modelos, no de entrenarlos.
  • Sistemas con GUI de escritorio — posible (Wails, Fyne) pero minoritario.

Go brilla en: APIs y microservicios, CLIs, infraestructura/DevOps, workers y pipelines de datos, proxies y gateways, tiempo real con WebSockets, y cualquier cosa con mucha concurrencia de red.