// 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

powershell — go

// 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.

compilación

< 1 segundo

Compilar y correr un servicio completo tarda menos que arrancar tu IDE. El ciclo editar→probar es casi de lenguaje interpretado.

memoria

~10–30 MB

Un microservicio Go típico en producción. El equivalente Spring Boot: 300–500 MB de heap JVM.

arranque

milisegundos

Ideal para serverless, CLIs y autoscaling. Sin warm-up de JVM ni class loading.

GC

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 hoyEquivalente en GoDiferencia clave
JVM + JAR/WARBinario nativo únicoSin runtime que instalar; el ejecutable ya lo incluye todo
Maven / Gradlego modIntegrado en el lenguaje, sin XML ni plugins
Spring Bootnet/http + router (chi/Gin)Sin contenedor DI ni anotaciones: cableado explícito en main()
JPA / Hibernatedatabase/sql, sqlx, sqlcSQL a la vista; los ORM completos (GORM) son minoría
Excepciones try/catchErrores como valores de retornoEl error es parte de la firma; no hay stack unwinding sorpresa
Herencia + implementsComposición + interfaces implícitasNadie declara "implements": si tiene los métodos, cumple la interfaz
Threads / virtual threads + canalesMillones de goroutines baratas, comunicación por canales tipados
JUnit + MockitoPaquete testing estándarTests de tabla, benchmarks y fuzzing incluidos de fábrica
Checkstyle / debates de estilogofmtUn solo estilo oficial, automático, fin de la discusión
Optional<T> / NonePatrón valor, ok y nilRetornos múltiples nativos en lugar de wrappers
npm / node_modulesgo get + caché globalSin carpeta de dependencias por proyecto; lockfile con hashes (go.sum)
async/await de Dart/JSCódigo síncrono + goroutinesSin "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.Reader tiene 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.Mutex o un bytes.Buffer recié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: