// 10 · plan de ataque para tu perfil exacto

Tu roadmap, la historia y los recursos

Seis semanas con entregables, la evolución del lenguaje que te van a preguntar en entrevistas, y los recursos que valen tu tiempo.

// cada semana, un entregable

Roadmap de 6 semanas

  1. S1Sintaxis y mentalidad

    Haz el Tour of Go completo (un día te basta) y reescribe la CLI gostats de la página de apps sin mirar. Objetivo: que if err != nil deje de dolerte.

  2. S2Interfaces y errores en serio

    Lee Effective Go. Refactoriza tu CLI: extrae interfaces pequeñas, añade errores con %w y tests de tabla con cobertura > 80%.

  3. S3Tu primera API completa

    Reconstruye la API de tareas con chi + Postgres (sqlx) + migraciones + JWT. Réplica de algo que ya hiciste en Spring — la comparación te enseñará más que cualquier tutorial.

  4. S4Concurrencia de verdad

    Construye el scraper concurrente con worker pool, timeouts por contexto y -race limpio. Después el chat WebSocket con el patrón hub. Esta semana es la que te convierte en "dev Go" y no "dev Java que escribe Go".

  5. S5Proyecto integrador

    API + worker + frontend React consumiéndola (embebido con go:embed), todo en Docker Compose con imágenes distroless. Súbelo a GitHub con el CI de la página 05: eso es un portfolio-piece real para vacantes.

  6. S6Pulido profesional

    Añade slog + métricas Prometheus + pprof al proyecto. Lee Google Go Style Guide y Learn Go with Tests como referencia continua.

// nuevo · lo que te van a preguntar

Historia del lenguaje en 8 hitos

Go evoluciona despacio a propósito — la promesa de compatibilidad de Go 1 (2012) garantiza que el código de hace una década compila hoy. Estos son los hitos que definen "Go moderno":

  1. 2009Nace Go

    Pike, Thompson y Griesemer lo publican como proyecto open source de Google. Objetivo: la velocidad de compilación de Pascal, la seguridad de Java, la concurrencia de CSP.

  2. 2012Go 1.0 y la promesa de compatibilidad

    Todo programa Go 1 válido seguirá compilando en cualquier Go 1.x. La razón por la que el ecosistema no tiene "python 2 vs 3".

  3. 2019Go 1.13: módulos y error wrapping

    Los módulos sustituyen a GOPATH (todo tutorial anterior quedó obsoleto) y llegan %w, errors.Is y errors.As.

  4. 2022Go 1.18: generics y fuzzing

    El cambio más grande de la historia del lenguaje: type parameters con constraints, más fuzzing nativo y workspaces.

  5. 2023Go 1.21: slog, min/max/clear

    Logging estructurado en la stdlib y el toolchain que se auto-gestiona (GOTOOLCHAIN).

  6. 2024Go 1.22: el router moderno y el fix del loop var

    ServeMux con métodos y path variables — frameworks opcionales. Y la variable de bucle se crea por iteración: muere la trampa de capturas en goroutines más famosa del lenguaje.

  7. 2024Go 1.23: iteradores

    range sobre funciones: secuencias perezosas al estilo generators, adoptadas por slices, maps y strings.

  8. 2025Go 1.24: alias genéricos, b.Loop, tool directives

    Benchmarks más robustos, herramientas versionadas en go.mod (tool) y mejoras de rendimiento del runtime (~2-3% general).

Preguntas de entrevista Go que caen una y otra vez
  • ¿Diferencia entre slice y array? ¿Qué pasa al hacer append? (→ colecciones)
  • ¿Cuándo usar canal y cuándo mutex? (→ sync)
  • ¿Qué es una goroutine leak y cómo la evitas? (→ errores comunes)
  • ¿Receptor por valor o por puntero? ¿Y cómo afecta a las interfaces? (→ structs)
  • ¿Cómo funciona defer y en qué orden se ejecutan? (→ defer)
  • ¿errors.Is vs errors.As? ¿Para qué envuelves con %w? (→ errores)
  • ¿Qué es el context y por qué toda función de I/O lo recibe? (→ context)
  • ¿Por qué el orden de iteración de un map es aleatorio?
  • ¿Qué imprime este código con goroutines y closures? (el clásico — desde Go 1.22 la respuesta cambió: variable por iteración)
  • ¿Cómo detectas una race condition? (go test -race — di esto y sonríe)

// el estante de referencia

Recursos que valen tu tiempo

✓

El consejo finalTu experiencia con Spring, React y APIs no se pierde: se traduce. Cada patrón que conoces tiene su forma Go — normalmente más pequeña y más explícita. El día que escribas una interfaz de un método sin pensarlo, dejaste de traducir: ya piensas en Go. Suerte, Daniel. 🐹