Temario del curso
1. Introducción a Go
- ¿Qué es Go (Golang)?
- Historia y filosofía de diseño de Go
- Go como lenguaje de programación para la web y sistemas
- Características clave:
- Tipado estático
- Simplicidad y legibilidad
- Compilación rápida
- Concurrencia integrada
- Reciclaje de memoria (Garbage Collection)
- Compilación multiplataforma
- Casos de uso comunes de Go
- Ventajas y limitaciones de Go
- Comparación de Go con C/C++, JavaScript, Ruby, Python y Java
- Comprensión del ecosistema de Go
- Vista general de la librería estándar de Go
- Módulos de Go y gestión de dependencias
- Anatomía de una aplicación Go
- Práctica: Examinar y ejecutar un programa simple de Go
2. Configuración del Entorno de Desarrollo de Go
- Instalación de Go
- Comprensión de la cadena de herramientas (toolchain) de Go
- Configuración de variables de entorno
- Elección de un IDE o editor de código
- Uso de la línea de comandos con Go
- Creación de un espacio de trabajo (workspace) de Go
- Comprensión de la estructura del proyecto en Go
- Inicialización de un proyecto con Go Modules
- Uso de
go mod init - Gestión de dependencias con
go get - Actualización e inspección de dependencias
- Formateo del código fuente con
gofmt - Ejecución de programas con
go run - Construcción de aplicaciones con
go build - Instalación de aplicaciones Go
- Compilación cruzada de aplicaciones
- Práctica: Crear y configurar un proyecto de Go dentro de un contenedor
3. Variables, Constantes y Tipos en Go
- Declaración de variables
- Tipos explícitos frente a tipos inferidos
- Declaraciones cortas de variables
- Constantes
- Valores iniciales (zero values)
- Ámbito y tiempo de vida de las variables
- Tipos de datos primitivos:
- Enteros
- Números de coma flotante
- Números complejos
- Booleanos
- Cadenas de caracteres (Strings)
- Conversiones de tipos
- Trabajo con Unicode y UTF-8
- Runes y bytes
- Asignación múltiple de variables
- Comprensión de la seguridad de tipos
- Ejercicio: Construir un pequeño programa de procesamiento de datos por línea de comandos
4. Operadores y Expresiones
- Operadores aritméticos
- Operadores de comparación
- Operadores lógicos
- Operadores de asignación
- Incremento y decremento
- Precedencia de operadores
- Trabajo con cálculos de enteros y coma flotante
- Evitar errores comunes de conversión de tipos
- Ejercicio: Implementar lógica de cálculos y validación
5. Fechas, Horas y Formateo
- Uso del paquete
time - Creación y manipulación de fechas
- Obtención de la hora actual
- Zonas horarias y ubicaciones
- Análisis (Parsing) de fechas y horas
- Formateo de fechas y horas
- Cálculo de duraciones
- Trabajo con marcas de tiempo Unix (timestamps)
- Gestión de tiempos de espera (timeouts)
- Ejercicio: Añadir marcas de tiempo y cálculos de duración a una aplicación
6. Arreglos, Slices, Mapas y Estructuras
Arreglos
- Declaración de arreglos
- Inicialización de arreglos
- Iteración sobre arreglos
- Arreglos multidimensionales
Slices
- Comprensión de slices frente a arreglos
- Creación de slices
- Añadido de elementos
- Copia de slices
- Longitud y capacidad de slices
- Extracción de sub-slices (slicing slices)
- Preguntas comunes o errores frecuentes con slices
Mapas
- Creación de mapas
- Añadido y eliminación de entradas
- Comprobación de la existencia de una clave
- Iteración sobre mapas
- Mapas que contienen datos complejos
Estructuras
-
Definición de estructuras
-
Campos de estructura
-
Inicialización de estructuras
-
Estructuras anidadas
-
Estructuras anónimas
-
Métodos de estructura
-
Etiquetas de estructura para JSON
-
Práctica: Modelar usuarios, productos y datos de la aplicación usando estructuras, slices y mapas
7. Lógica Condicional y Bucles
- Enunciados
if elseyelse if- Declaración de variables dentro de condiciones
- Bucles
for - Bucles infinitos
- Condiciones de bucle
breakycontinue- Iteración con
range - Bucles anidados
- Enunciados
switch - Switch basados en expresiones
- Múltiples casos
- Casos por defecto (default)
- Type switches
- Ejercicio: Implementar lógica de validación y procesamiento de la aplicación
8. Funciones
- Definición de funciones
- Parámetros de función
- Valores de retorno
- Múltiples valores de retorno
- Valores de retorno nombrados
- Funciones variádicas
- Funciones anónimas
- Valores de función
- Clausuras (Closures)
- Recursión
- Paso de funciones como argumentos
- Funciones que devuelven errores
- Diseño de funciones pequeñas y reutilizables
- Ejercicio: Refactorizar código existente en funciones reutilizables
9. Punteros y Conceptos de Memoria
- ¿Qué es un puntero?
- Operadores de dirección y de referenciación (dereference)
- Punteros y parámetros de función
- Receptores de puntero
- Punteros a estructuras
- Punteros nulos (nil pointers)
- Cuándo usar punteros
- Semántica de valor frente a referencia
- Comprensión de la gestión de memoria y el reciclaje de memoria en Go
- Errores comunes con punteros
- Práctica: Modificar datos de la aplicación usando punteros
10. Creación de una Aplicación Web en Go
- Vista general de las capacidades web de Go
- Introducción al paquete
net/http - Creación de un servidor HTTP
- Peticiones y respuestas HTTP
- Métodos HTTP
- URLs de petición y parámetros de consulta
- Encabezados HTTP (headers)
- Códigos de estado HTTP
- Fundamentos de enrutamiento (routing)
- Creación de manejadores (handlers)
- Gestión de datos de formulario
- Servicio de archivos estáticos
- Trabajo con plantillas HTML
- Variables de plantilla y estructuras de control
- Estructuración de una aplicación web
- Práctica: Construir un servidor web básico de Go
11. Construcción de un Servicio Web RESTful
- Fundamentos de la arquitectura REST
- Diseño de puntos finales de la API (endpoints)
- GET, POST, PUT, PATCH y DELETE
- Trabajo con JSON
- Codificación y decodificación de JSON
- Validación de peticiones
- Códigos de estado HTTP
- Respuestas de error
- Parámetros de consulta y parámetros de ruta
- Estructuras de respuesta de la API
- Separación de los manejadores de la lógica de negocio
- Práctica: Construir una API REST de CRUD
12. Runtime de Go, Compilación y Construcción de Proyectos
- Comprensión del compilador de Go
- Proceso de construcción de Go
go rungo buildgo installgo test- Banderas de construcción (build flags)
- Configuración específica de entorno
- Construcción para diferentes sistemas operativos y arquitecturas
- Generación de binarios independientes
- Gestión de la configuración de la aplicación
- Ejercicio: Compilar la aplicación para múltiples plataformas
13. Trabajo con Archivos y la Web
- Apertura y cierre de archivos
- Lectura de archivos
- Escritura de archivos
- Creación de directorios
- Metadatos de archivos
- E/S con búfer (Buffered I/O)
- Trabajo con flujos (streams)
- Lectura y escritura de archivos JSON
- Clientes HTTP
- Realización de peticiones HTTP salientes
- Gestión de errores del cliente HTTP
- Tiempos de espera y cancelación
- Procesamiento de respuestas de API
- Práctica: Recuperar datos de una API externa y persistirlos localmente
14. Gestión de Errores y Depuración
- El enfoque de Go hacia los errores
- Retorno de errores desde funciones
- Comprobación de errores
- Creación de errores personalizados
- Envoltura de errores (wrapping errors)
- Añadido de contexto a los errores
errors.Isyerrors.As- Pánico y recuperación (panic and recovery)
- Cuándo usar
panic - Depuración de problemas comunes en Go
- Registro de actividad de la aplicación (logging)
- Uso de herramientas de depuración de Go
- Ejercicio: Diagnosticar y corregir errores de aplicación introducidos deliberadamente
15. Interfaces y Abstracción
- ¿Qué es una interfaz?
- Implementación implícita de interfaces
- Definición de interfaces
- Valores de interfaz
- Interfaces vacías /
any - Aserciones de tipo (type assertions)
- Type switches
- Implementaciones por puntero frente a valor
- Diseño de interfaces pequeñas
- Inversión de dependencias
- Uso de interfaces para pruebas
- Reducción del acoplamiento de la aplicación
- Práctica: Introducir interfaces en la aplicación web de ejemplo
16. Paquetes y Organización del Proyecto
- Creación de paquetes
- Convenciones de nomenclatura de paquetes
- Identificadores exportados y no exportados
- Importación de paquetes
- Inicialización de paquetes
- Organización de capas de la aplicación
- Paquetes internos
- Gestión de dependencias con Go Modules
- Versionado semántico
- Uso de paquetes de terceros
- Evitar dependencias circulares
- Diseño de proyectos Go mantenibles
- Ejercicio: Refactorizar la aplicación en paquetes separados
17. Concurrencia con Goroutines
- ¿Qué es la concurrencia?
- Goroutines
- Iniciar goroutines
- Comprensión de la ejecución concurrente ligera
- Desafíos de sincronización
- Estado compartido
- Condiciones de carrera (race conditions)
- Uso de
sync.WaitGroup - Mutexes y mutexes de lectura/escritura
- Operaciones atómicas
- Práctica: Convertir una tarea secuencial en procesamiento concurrente
18. Canales (Channels)
- Comprensión de canales
- Envío y recepción de valores
- Canales con búfer frente a sin búfer
- Comportamiento bloqueante (blocking behavior)
- Cierre de canales
- Iteración sobre canales (ranging)
- Canales direccionales
- Comunicación basada en canales
- Enunciados select
- Tiempos de espera y cancelación
- Patrones de pool de trabajadores (worker-pool)
- Patrones de productor/consumidor
- Práctica: Construir un sistema concurrente de trabajadores
19. Contexto y Gestión de Peticiones
- Por qué los contextos son importantes en aplicaciones web
context.Context- Contexto acotado por la petición
- Cancelación
- Límites de tiempo (deadlines)
- Tiempos de espera (timeouts)
- Propagación del contexto a través de las capas de la aplicación
- Cancelación de operaciones de base de datos o HTTP
- Evitar el mal uso del contexto
- Ejercicio: Añadir cancelación de peticiones y tiempos de espera a la aplicación web
20. Pruebas de Aplicaciones Go
- Por qué la prueba automatizada es importante
- Escritura de pruebas unitarias
- El paquete
testing - Funciones de prueba
- Convenciones de nomenclatura de pruebas
- Pruebas dirigidas por tabla (table-driven tests)
- Pruebas de errores
- Pruebas de manejadores HTTP
- Servidores de prueba HTTP
- Fijaciones de prueba (test fixtures)
- Cobertura de pruebas (test coverage)
- Pruebas de referencia (benchmarks)
- Pruebas de ejemplo
- Pruebas de interfaces con mocks o falsos
- Práctica: Crear una suite de pruebas para la aplicación de ejemplo
21. Optimización de Rendimiento
- Comprensión del rendimiento de las aplicaciones Go
- Identificación de cuellos de botella
- Rendimiento de CPU frente a memoria
- Estructuras de datos eficientes
- Reducción de asignaciones innecesarias
- Cadenas, bytes y búferes
- Gestión de goroutines
- Evitar la concurrencia excesiva
- Estrategias de caché
- Consideraciones sobre base de datos y red
- Perfilado de aplicaciones
- Pruebas de referencia y rendimiento
- Uso de herramientas de perfilado de Go
- Ejercicio: Perfilar y optimizar una aplicación deliberadamente ineficiente
22. Seguridad y Prácticas Robustas para Aplicaciones Web
- Validación de la entrada del usuario
- Gestión segura de peticiones HTTP
- Prevención de vulnerabilidades web comunes
- Gestión segura de errores
- Conceptos de autenticación y autorización
- Gestión de secretos y configuración
- Comunicación HTTP segura
- Evitar información sensible en registros
- Gestión y actualización de dependencias
- Limites de recursos y tiempos de espera de peticiones
- Ejercicio: Revisar y endurecer la API de ejemplo
23. Registro de Aplicaciones y Observabilidad
- Fundamentos de registro (logging)
- Registro estructurado
- Niveles de registro
- Registro de peticiones
- Registro de errores
- Correlación e IDs de petición
- Monitoreo del comportamiento de la aplicación
- Métricas básicas
- Puntos finales de comprobación de salud (health-check endpoints)
- Diagnóstico de problemas de producción
- Práctica: Añadir registro estructurado y comprobaciones de salud
24. Contenedorización de la Aplicación Go
- ¿Por qué usar contenedores?
- Aplicaciones Go y contenedorización
- Escritura de un Dockerfile
- Construcciones multietapa (multi-stage builds)
- Construcción de una imagen de tiempo de ejecución mínima
- Gestión de la configuración a través de variables de entorno
- Red de contenedores
- Exposición de puertos de la aplicación
- Ejecución de la aplicación en un contenedor
- Pruebas de la aplicación contenedorizada
- Práctica: Empaquetar la aplicación Go de ejemplo como un contenedor listo para producción
25. Despliegue (Deployment)
- Preparación de la aplicación para producción
- Construcción de binarios de producción
- Configuración del entorno
- Despliegue basado en contenedores
- Arquitectura de despliegue
- Proxies inversos (reverse proxies)
- Consideraciones sobre HTTPS/TLS
- Comprobaciones de salud de la aplicación
- Apagado elegante (graceful shutdown)
- Gestión de señales del sistema operativo
- Escala de aplicaciones web Go
- Escala horizontal frente a vertical
- Resolución de problemas básica del despliegue
- Práctica: Desplegar la aplicación web de ejemplo
26. Proyecto Final: Aplicación Web Completa en Go
Los participantes integran los conceptos desarrollando una aplicación completa.
El proyecto puede incluir:
- Inicialización del proyecto con Go Modules
- Organización de paquetes
- Enrutamiento HTTP
- Puntos finales de la API REST
- Gestión de peticiones y respuestas JSON
- Validación de entradas
- Gestión de errores
- Interfaces
- Procesamiento concurrente
- Comunicación con APIs externas
- Persistencia en archivos o base de datos
- Pruebas automatizadas
- Registro de eventos (logging)
- Consideraciones de rendimiento
- Contenedorización
- Configuración de producción
- Despliegue
27. Revisión y Mejores Prácticas
- Revisión de la sintaxis fundamental de Go
- Convenciones de codificación de Go
- Escritura de Go idiomático
- Mantenimiento del código simple
- Diseño efectivo de paquetes
- Mejores prácticas de gestión de errores
- Principios de diseño de interfaces
- Mejores prácticas de concurrencia
- Estrategias de pruebas
- Consideraciones de rendimiento
- Mantenibilidad y legibilidad
- Errores comunes cometidos por nuevos desarrolladores de Go
- Enfoques recomendados para continuar el desarrollo en Go
28. Conclusión
- Revisión de conceptos clave
- Revisión de la aplicación web completada
- Preguntas y discusión
- Resolución de problemas de escenarios del mundo real comunes
- Próximos pasos recomendados para el desarrollo en Go
- Librerías adicionales de Go y recursos del ecosistema
- Más oportunidades para construir servicios Go de grado de producción
Requerimientos
- Comprensión de los principios generales de la programación
Audiencia
- Desarrolladores
Formación Corporativa a Medida
Soluciones de formación diseñadas exclusivamente para empresas.
- Contenido personalizado: Adaptamos el temario y los ejercicios prácticos a los objetivos y necesidades reales del proyecto.
- Calendario flexible: Fechas y horarios adaptados a la agenda de su equipo.
- Modalidad: Online (en directo), In-company (en sus oficinas) o Híbrida.
Precio por grupo privado (formación online) desde 5800 € + IVA*
Contáctenos para obtener un presupuesto exacto y conocer nuestras promociones actuales
Reseñas (5)
El formador demostró ser un experto en el tema, algo que nunca doy por sentado. Proporcionó una visión muy útil sobre los estándares de la industria.
Giuseppe
Curso - Learning Go Programming
Traducción Automática
Disfruté de la cantidad de ejercicios prácticos que hicimos. Aprendo mejor haciendo cosas, por lo que fue muy útil que Francesco tuviera muchos ejercicios prácticos para realizar. Me costó entender algunos conceptos presentados en las diapositivas, pero cuando pude poner manos a la obra e implementar algunas de las características clave del lenguaje, me ayudó a comprenderlo mejor.
Adam Fitzhugh - OpticoreIT
Curso - Learning Go Programming
Traducción Automática
el ritmo, la capacidad de los formadores para ayudar y mantener preguntas ligeramente más difíciles.
Andrei Mihai - Viasat
Curso - Learning Go Programming
Traducción Automática
El conocimiento exhaustivo de Radu y el ajuste del ritmo para mí.
Adeel Ahmad - Coefficient Data Ltd
Curso - Learning Go Programming
Traducción Automática
Flexibilidad del formador. Realmente adaptó el curso a nuestras necesidades específicas.
Daniel Kurner - Daimler TSS
Curso - Learning Go Programming
Traducción Automática