Boost Academy
FormaciónEvaluacionesPerfil
Volver
  • En directo

Go (Golang) — Avanzado

10h de clase en directo·HACK A BOSS·Español

Skills que aprenderás

  • Go (Golang)

Convocatorias

Necesitas un plan activo

Para acceder a los cursos en directo necesitas un plan activo. Estamos trabajando para que los planes estén disponibles pronto — ¡mantente atento!

No hay convocatorias abiertas ahora mismo, pero no te pierdas la oportunidad: guarda este curso y te avisamos en cuanto se abra una convocatoria.

Descripción

Objetivos

Temario

Requisitos técnicos

Conocimientos previos

Detalles de la convocatoria

Recursos

No hay recursos disponibles todavía para esta convocatoria

Dirigido a desarrolladores con experiencia consolidada en Go que ya dominan la concurrencia básica, el sistema de tipos y la escritura de tests, este curso lleva al participante al terreno donde el lenguaje se usa en producción a escala real. A lo largo de diez horas se trabaja con las herramientas de profiling y diagnóstico del runtime —pprof, race detector, trazas de GC— como punto de partida analítico para tomar decisiones de diseño justificadas; se abordan los patrones de concurrencia avanzada (pipeline, fan-out/fan-in, worker pool) y el debate fundamentado entre sync.Mutex y channels; se profundiza en el modelado de errores apto para sistemas distribuidos; y se construye un pipeline de CI completo con análisis estático, cobertura y generación de código automatizada. Al finalizar, el participante será capaz de diseñar servicios Go de alto rendimiento, diagnosticar sus cuellos de botella con evidencia empírica y establecer las garantías de calidad automatizadas que un equipo de producción necesita.

Al completar el curso, el participante será capaz de:

  1. Comprender el impacto del garbage collector de Go en la latencia de cola (p99) y los parámetros de runtime (GOGC, GOMEMLIMIT) que permiten ajustar su comportamiento con base en trazas reales.
  2. Identificar condiciones de race condition en una base de código concurrente existente empleando el race detector de Go y distinguir las rutas problemáticas de las que no lo son.
  3. Evaluar las implicaciones de rendimiento y legibilidad de sync.Mutex frente a channels en escenarios de acceso concurrente concreto, apoyándose en benchmarks y análisis de contención.
  4. Aplicar los patrones de concurrencia avanzada —pipeline, fan-out/fan-in y worker pool— para estructurar servicios que cumplan restricciones explícitas de throughput y latencia.
  5. Reducir las allocations de memoria de un programa Go mediante el ciclo medir-optimizar-verificar usando pprof y go test -benchmem hasta alcanzar los objetivos de rendimiento definidos.
  6. Comparar implementaciones de serialización (JSON nativa, alternativas de alto rendimiento, Protobuf) a través de benchmarks estadísticamente significativos y seleccionar la más adecuada para un servicio de alta frecuencia.
  7. Diseñar una estrategia de manejo de errores para sistemas en producción que combine errores centinela, tipos personalizados y políticas de retry con backoff exponencial en clientes HTTP/gRPC.
  8. Construir un pipeline de CI que integre linting, tests de integración, análisis de cobertura mínima del 80 % y generación automática de código (mocks, stubs, marshalers), bloqueando el merge ante incumplimientos.

Bloque 1 — El runtime bajo el microscopio: GC, memoria y herramientas de diagnóstico

El bloque abre con una lectura crítica del garbage collector de Go: cómo el runtime decide cuándo recolectar, qué significa la latencia de cola p99 en este contexto y cómo las variables de entorno GOGC y GOMEMLIMIT alteran el equilibrio entre presión de memoria y pausas. Los participantes trabajan con trazas de GC reales para cuantificar el efecto de cada ajuste antes de modificar ninguna línea de código. Sobre esa base se introduce el ciclo de optimización de memoria: captura de perfiles con pprof, interpretación de los flamegraphs de heap, identificación de las allocations evitables y verificación de mejoras con go test -benchmem. El bloque cierra con benchmarks comparativos de serialización JSON y Protobuf —usando -benchtime para garantizar significación estadística— situando la elección de librería como una decisión técnica respaldada por datos.

Bloque 2 — Concurrencia avanzada: patrones, diagnóstico y decisiones de diseño

Este bloque comienza donde GO02 termina y profundiza en tres patrones de concurrencia que aparecen recurrentemente en servicios de producción: pipeline, fan-out/fan-in y worker pool. Para cada uno se parte de las restricciones de throughput y latencia como parámetros de diseño, no como consideraciones a posteriori. A continuación se aborda el diagnóstico de race conditions: el race detector de Go se usa sobre bases de código reales para localizar todas las rutas problemáticas y proponer correcciones verificables. El bloque culmina con el debate sync.Mutex vs. channels —uno de los puntos de mayor controversia en equipos Go— resuelto mediante benchmarks de contención y análisis de legibilidad, de modo que la elección quede documentada con criterios reproducibles.

Bloque 3 — Diseño de errores y calidad automatizada en producción

El tercer bloque trata el manejo de errores como un problema de arquitectura, no de sintaxis. Se modelan errores centinela y tipos de error personalizados para que el código de llamada pueda reaccionar de forma precisa, y se implementan estrategias de retry con backoff exponencial en clientes HTTP y gRPC que evitan las tormentas de reintentos. Finalmente el bloque integra todo el trabajo del curso en la cadena de entrega: se construye un pipeline de CI con staticcheck o golangci-lint, tests de integración, umbral de cobertura del 80 % y automatización de generación de código mediante go generate con mockgen o stringer. El resultado es un repositorio cuyo merge queda bloqueado si cualquiera de esas garantías no se cumple.

  • Go 1.22 o superior instalado localmente.
  • Acceso a un entorno de CI (GitHub Actions recomendado; se proporcionan plantillas equivalentes para GitLab CI).
  • golangci-lint instalado o acceso a su imagen Docker oficial.
  • mockgen (del proyecto uber-go/mock o google/go-mock) y stringer disponibles en el PATH.
  • Editor con soporte Go (VS Code + extensión Go o GoLand); gopls actualizado a la versión compatible con Go 1.22.
  • Acceso a terminal con permisos para ejecutar binarios de profiling (pprof, go tool trace).
  • Conexión a internet para descargar dependencias de módulos durante los ejercicios prácticos.
  • Manejo fluido de goroutines, channels y select (equivalente al curso GO02).
  • Escritura de tests unitarios y de integración en Go con el paquete estándar testing.
  • Gestión de dependencias con Go modules y uso habitual de la CLI de Go.
  • Familiaridad con al menos un sistema de CI (GitHub Actions, GitLab CI o equivalente) a nivel de configuración de pipelines básicos.
  • Comprensión del modelo de interfaces de Go y uso cotidiano de la biblioteca estándar (net/http, encoding/json, context).