Concurrencia Avanzada y Patrones de Diseño en Go
Clase 1 de 19 • Curso de Go Avanzado: Concurrencia y Patrones de Diseño
Contenido del curso
Concurrencia
- 2

Condiciones de Carrera en Programación Concurrente con Go
04:52 min - 3

Evitar Condiciones de Carrera en Go con Mutex y WaitGroup
11:26 min - 4

Lectura y Escritura Concurrente en Go con RWMutex
06:15 min - 5

Creación de un Sistema de Caché Concurrente en Go
14:29 min - 6

Manejo de Condiciones de Carrera en Go: Implementación de Mutex
08:52 min - 7

Cache concurrente en Go para cálculos intensivos de Fibonacci
16:31 min
Patrones de diseño
- 8

Patrones de Diseño en Programación Orientada a Objetos con Go
04:53 min - 9

Patrón de Diseño Factory en Go: Creación y Uso Práctico
15:17 min - 10

Implementación de Singleton en Go para Conexiones de Base de Datos
08:48 min - 11

Patrón de Diseño Adapter en Go: Implementación Práctica
09:51 min - 12

Patrón de Diseño Observer en Go: Implementación Práctica
11:59 min - 13

Implementación del Patrón de Diseño Strategy en Go
08:53 min
Net
- 14

Escaneo de Puertos TCP con Go: Introducción Básica
07:45 min - 15

Concurrencia en Go: Escáner de Puertos Eficiente y Personalizable
09:16 min - 16

Implementación de NetCAD como Cliente TCP en Go
10:14 min - 17

Construcción de Back End para Servidor de Chat en Go
16:08 min - 18

Implementación de un Servidor de Chat en Go con TCP
13:54 min
Conclusión
¿Qué hace a Go un lenguaje especial?
¡Emocionante y poderoso! Go, también conocido como Golang, es un lenguaje de programación que destaca por su capacidad para manejar la concurrencia de manera nativa. Esto es especialmente útil para quienes han trabajado con otros lenguajes y han necesitado instalar múltiples librerías o paquetes para lograr funcionalidades similares. Con Go, no es necesario. Go utiliza un modelo llamado Communicating Sequential Processes, un lenguaje matemático avanzado que permite trabajar eficientemente con sistemas concurrentes.
¿Cómo maneja Go las concurrencias?
Las Go rutinas son el alma de la concurrencia en Go. Usando la palabra reservada "Go", tú puedes iniciar estas rutinas, lo que subraya la importancia que los diseñadores del lenguaje han puesto en la concurrencia. Las Go rutinas son inicializadas con una stack de aproximadamente dos kilobytes, lo que permite ejecutar múltiples rutinas sin comprometer el rendimiento. Contrasta con Java, donde cada Thread necesita aproximadamente un mega de stack.
Para la comunicación entre rutinas se utilizan canales, que pueden ser con buffer o sin buffer. Los canales con buffer, en particular, sirven como semáforos para la gestión de concurrencias. Aprenderás a usar técnicas como wait groups y channels para sincronizar rutinas y asegurarte de que tus procesos funcionen como un reloj.
¿Qué más aprenderás en un curso avanzado de Go?
Concurrencia de valor compartido y su complejidad
A diferencia de la concurrencia básica, donde cada Go rutina maneja datos independientes, la concurrencia de valor compartido involucra la interacción con las mismas variables y constantes. Esto puede llevar a problemas complejos, especialmente cuando una rutina intenta escribir y otra leer simultáneamente.
Profundización en patrones de diseño
Los patrones de diseño son herramientas vitales que aumentan tu nivel como desarrollador. En el contexto de Go, aprenderás a implementar técnicas que optimizarán tus proyectos, permitiéndote un desarrollo más organizado y eficiente.
Utilización del paquete net y conexiones TCP
Go también se extiende al mundo de las conexiones de red mediante su paquete net. Aquí aprenderás a crear conexiones TCP, que te permiten ejecutar operaciones interesantes como escaneo de puertos y desarrollar un chat a nivel de terminal.
¿Por qué Go sigue siendo tan popular?
Go no solo proporciona un manejo eficiente de la concurrencia y redes, sino que viene con una potente librería estándar, eliminando la necesidad de dependencias externas. Proyectos como Prometheus, Helm, y GRPC reflejan la adopción de Go en la comunidad de la computación en la nube debido a su eficiencia y versatilidad.
Además, gracias a los Go Modules, Go se ha liberado de restricciones previas como la necesidad del GoPath, facilitando así un flujo de trabajo más ágil para los desarrolladores.
Si te sientes abrumado por estos temas avanzados, considera repasar los cursos básicos, prácticos e intermedios que encontrarás en plataformas como Platzi. Están diseñados para preparar y motivar a estudiantes de todos los niveles antes de aventurarse en el curso avanzado. ¡Adelante, tu potencial en Go es ilimitado!