Solicitar información

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
  • else y else if
  • Declaración de variables dentro de condiciones
  • Bucles for
  • Bucles infinitos
  • Condiciones de bucle
  • break y continue
  • 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 run
  • go build
  • go install
  • go 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.Is y errors.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
 28 Horas

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.
Inversión

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)

Próximos cursos

Categorías Relacionadas