// guía completa · nivel: fullstack con experiencia
De Java y Spring
al mundo Go
Ya sabes programar. Esta guía no te enseña qué es una variable: te enseña cómo piensa Go, en qué se parece a lo que ya dominas y en qué te va a romper la cabeza (para bien).
vienes de: Java · Spring
React
Flutter
Python
// el porqué antes del cómo
Filosofía: por qué existe Go
Go nació en Google en 2007 (Rob Pike, Ken Thompson y Robert Griesemer) como reacción directa a dos dolores que tú conoces bien: la ceremonia de Java/C++ y la lentitud de los lenguajes dinámicos como Python.
La apuesta es radical: un lenguaje deliberadamente pequeño. Solo 25 palabras clave (Java tiene ~50), una sola forma de hacer cada cosa, formateo automático no negociable y compilación a un binario nativo que arranca en milisegundos. Donde Java te da un martillo suizo con 40 herramientas, Go te da tres herramientas perfectamente afiladas.
El resultado: es el lenguaje detrás de Docker, Kubernetes, Terraform, Prometheus, Caddy, CockroachDB y de gran parte de la infraestructura cloud moderna. Si Spring domina el backend corporativo, Go domina el backend de infraestructura y los microservicios de alto rendimiento.
Tu ventaja de entradaTipado estático fuerte como Java, sintaxis ligera casi como Python, y un modelo de concurrencia que hace que los CompletableFuture parezcan del siglo pasado. Con tu perfil, Go productivo se alcanza en 2–3 semanas.
< 1 segundo
Compilar y correr un servicio completo tarda menos que arrancar tu IDE. El ciclo editar→probar es casi de lenguaje interpretado.
~10–30 MB
Un microservicio Go típico en producción. El equivalente Spring Boot: 300–500 MB de heap JVM.
milisegundos
Ideal para serverless, CLIs y autoscaling. Sin warm-up de JVM ni class loading.
pausas < 1 ms
Go tiene , como Java, pero optimizado para latencia con pausas sub-milisegundo.
// traduce lo que ya sabes
Mapa mental: tu mundo → el mundo Go
| Lo que usas hoy | Equivalente en Go | Diferencia clave |
|---|---|---|
| JVM + JAR/WAR | Binario nativo único | Sin runtime que instalar; el ejecutable ya lo incluye todo |
| Maven / Gradle | go mod | Integrado en el lenguaje, sin XML ni plugins |
| Spring Boot | net/http + router (chi/Gin) | Sin contenedor DI ni anotaciones: cableado explícito en main() |
| JPA / Hibernate | database/sql, sqlx, sqlc | SQL a la vista; los ORM completos (GORM) son minoría |
| Excepciones try/catch | Errores como valores de retorno | El error es parte de la firma; no hay stack unwinding sorpresa |
| Herencia + implements | Composición + interfaces implícitas | Nadie declara "implements": si tiene los métodos, cumple la interfaz |
| Threads / virtual threads | + canales | Millones de goroutines baratas, comunicación por canales tipados |
| JUnit + Mockito | Paquete testing estándar | Tests de tabla, benchmarks y fuzzing incluidos de fábrica |
| Checkstyle / debates de estilo | gofmt | Un solo estilo oficial, automático, fin de la discusión |
Optional<T> / None | Patrón valor, ok y nil | Retornos múltiples nativos en lugar de wrappers |
| npm / node_modules | go get + caché global | Sin carpeta de dependencias por proyecto; lockfile con hashes (go.sum) |
| async/await de Dart/JS | Código síncrono + goroutines | Sin "colores de funciones": todo se lee secuencial, el runtime paraleliza |
¿Por qué Go se siente tan "pequeño"? (y por qué es a propósito)
Go rechaza deliberadamente cosas que en Java son centrales: no hay herencia de clases, no hay sobrecarga de métodos, no hay excepciones checked, no hay anotaciones, no hubo generics hasta 2022 y no hay operador ternario. La tesis de Rob Pike: "el código se lee muchas más veces de las que se escribe", así que el lenguaje elimina toda característica que permita escribir código "listo" difícil de leer.
Consecuencia práctica: dos equipos Go distintos escriben código casi idéntico. Abrir un repo Go ajeno y entenderlo en minutos es la norma, no la excepción. Compara eso con abrir un proyecto Spring lleno de anotaciones custom, AOP y magia de proxies.
El costo: a veces escribirás más líneas (sobre todo if err != nil). Go elige verbosidad local a cambio de claridad global. Los que vienen de Java suelen tardar una semana en dejar de pelearse con eso — y un mes en no querer volver.
Los proverbios de Go (la cultura en 8 frases)
- "No compartas memoria para comunicarte; comunícate para compartir memoria." — canales antes que locks.
- "Cuanto más grande la interfaz, más débil la abstracción." — por eso
io.Readertiene un método. - "Un poco de duplicación es más barato que una mala abstracción." — herejía para un javero, paz mental a los seis meses.
- "Los errores son valores." — se programan, no se atrapan.
- "gofmt no es el estilo favorito de nadie, pero es el favorito de todos."
- "Claro es mejor que ingenioso." — el código listo es un bug futuro.
- "La concurrencia no es paralelismo." — estructura tu programa en piezas independientes; el runtime decide cuándo corren a la vez.
- "Haz que el zero value sea útil." — un
sync.Mutexo unbytes.Bufferrecién declarados ya funcionan.
// cómo está organizado este sitio
Elige tu ruta
El sitio está pensado para leerse en orden (01 → 10), pero cada página es autónoma. Si tienes prisa, estas son las tres paradas que más rendimiento te dan por minuto invertido:
Interfaces implícitas
Lo que de verdad separa Go de Java. Si solo lees una página, que sea esta.
03 · la joyaGoroutines y canales
La razón por la que los equipos migran a Go. Con worker pools y pipelines reales.
09 · práctica7 apps completas
API REST, CLI, worker, web SSR, gRPC, scraper y chat WebSocket — archivo por archivo.
Fundamentos
Toolchain, sintaxis, flujo, defer y convenciones de nombres.
04Librería estándar
Strings, time, JSON, archivos, io.Reader y slog a fondo.
05Proyecto y calidad
Módulos, layout, testing, linters, CI y patrones idiomáticos.
06HTTP y seguridad
APIs REST, middleware, JWT, CORS, rate limiting y cómo servir tu React.
07Bases de datos
database/sql, sqlx, sqlc, GORM, transacciones y NULLs.
08Deploy y rendimiento
Binarios, Docker de 15 MB, observabilidad, pprof y benchmarks.
10Roadmap
Plan de 6 semanas, historia del lenguaje, entrevistas y recursos.