Una guía completa y estructurada para aprender Go desde patrones de diseño hasta conceptos avanzados de programación. Cada ejemplo es atómico y ejecutable individualmente, facilitando el estudio paso a paso.
Cada concepto está organizado en su propia carpeta con un archivo main.go
completo y ejecutable. Esto permite:
- ✅ Ejecutar ejemplos específicos sin dependencias
- ✅ Estudiar conceptos de forma aislada
- ✅ Evitar conflictos entre ejemplos
- ✅ Mejor comprensión paso a paso
- Singleton - Una única instancia global con thread-safety
- Factory - Creación de objetos sin especificar clases exactas
- Builder - Construcción paso a paso de objetos complejos
- Abstract Factory - Familias de objetos relacionados
- Prototype - Clonación de objetos existentes
- Adapter - Compatibilidad entre interfaces incompatibles
- Composite - Estructuras de árbol y objetos individuales
- Decorator - Añadir funcionalidad dinámicamente
- Facade - Interfaz simplificada a subsistemas complejos
- Proxy - Control de acceso a objetos
- Bridge - Separar abstracción de implementación
- Flyweight - Compartir eficientemente objetos similares
- Observer - Notificaciones automáticas de cambios
- Strategy - Intercambio dinámico de algoritmos
- Command - Encapsular operaciones como objetos
- State - Cambiar comportamiento según estado interno
- Template Method - Esqueleto de algoritmo reutilizable
- Chain of Responsibility - Cadena de manejadores
- Mediator - Comunicación indirecta entre objetos
- Visitor - Operaciones sobre estructuras de objetos
- Interfaces - Contratos, composición y duck typing
- Structs y Métodos - POO en Go, receivers, embedding
- Error Handling - Manejo idiomático de errores
- Slices y Arrays - Estructuras de datos fundamentales
- Maps - Hash tables y operaciones key-value
- Punteros - Gestión de memoria y referencias
- Defer, Panic y Recover - Control de flujo avanzado
- Type Assertions - Conversión segura de tipos
- Reflection - Introspección de tipos en runtime
- Generics - Programación genérica (Go 1.18+)
- Introducción - Conceptos básicos de goroutines
- Variable Capture - Captura de variables en closures
- WaitGroup Patterns - Patrones de sincronización
- Race Conditions - Condiciones de carrera y mutex
- Basic Channels - Comunicación entre goroutines
- Buffered Channels - Channels con buffer
- Select Statement - Multiplexing de channels
- Worker Pools - Pool de workers
- Pipeline - Procesamiento en cadena
- Fan-in/Fan-out - Patrones de distribución
- Memory Management - Gestión de memoria y GC
- Performance Profiling - Análisis de rendimiento
- Reflection - Introspección avanzada
- Generics - Programación genérica avanzada
- Build Tags - Compilación condicional
- Code Generation - Generación automática
- Plugin System - Sistema de plugins dinámicos
- Assembly Integration - Código assembler
- HTTP Server - Servidor HTTP básico
- HTTP Client - Cliente HTTP avanzado
- REST API - API RESTful completa
- Middleware - Patrones de middleware
- WebSockets - Comunicación bidireccional
- Authentication - JWT y autenticación
- Request Validation - Validación de requests
- Unit Testing - Tests unitarios
- Table-Driven Tests - Tests tabulares
- Mocking - Mocks y stubs
- Benchmarking - Medición de rendimiento
- Integration Testing - Tests de integración
- Fuzzing - Testing con datos aleatorios
- Coverage Analysis - Análisis de cobertura
- Repository Pattern - Abstracción de datos
- Unit of Work - Gestión de transacciones
- Data Mapper - Separación dominio/persistencia
- Connection Pooling - Pool de conexiones
- Query Builder - Constructor de consultas
- CQRS - Command Query Responsibility Segregation
- Memory Optimization - Optimización memoria
- CPU Profiling - Análisis de CPU
- Garbage Collection - Optimización GC
- Caching Strategies - Estrategias de caché
- Circuit Breaker - Protección fallos
- Rate Limiting - Control de velocidad
- Go 1.19+ instalado
- Editor con soporte para Go (VS Code recomendado)
- Git para clonar el repositorio
# Clonar el repositorio
git clone <repository-url>
cd go-learning/learning
# Ejecutar un ejemplo específico (nuevo formato atómico)
go run 01-design-patterns/01-creational/01-singleton/main.go
go run 02-go-fundamentals/03-error-handling/main.go
go run 03-concurrency/01-basic-goroutines/01-introduction/main.go
# Ejecutar todos los ejemplos de una categoría
find 01-design-patterns -name main.go -exec go run {} \;
# Análisis de race conditions
go run -race 03-concurrency/01-basic-goroutines/04-race-conditions/main.go
# Ver estructura del proyecto
tree -I '__pycache__|*.pyc|.git'
Cada carpeta incluye:
- � Carpeta dedicada para cada concepto
- 📖 main.go ejecutable con documentación completa
- 💡 Explicación del problema que resuelve
- ✅ Múltiples ejemplos prácticos en un archivo
- 🔧 Casos de uso reales y cuándo aplicarlo
⚠️ Mejores prácticas y consideraciones- 🧪 Función main() demostrativa
- 📝 Comentarios explicativos detallados
1️⃣ Fundamentos Go (02-go-fundamentals/)
├── Interfaces y Structs
├── Error Handling
├── Slices, Maps, Pointers
└── Conceptos básicos
2️⃣ Concurrencia (03-concurrency/)
├── Goroutines básicas
├── Channels y select
└── Patrones avanzados
3️⃣ Design Patterns (01-design-patterns/)
├── Creational patterns
├── Structural patterns
└── Behavioral patterns
4️⃣ Temas Avanzados (04-advanced-topics/)
├── Performance y profiling
├── Memory management
└── Técnicas avanzadas
5️⃣ Aplicaciones Prácticas (05-web-development/, 06-testing/, etc.)
├── Desarrollo web
├── Testing estrategias
└── Optimización
# Formatear todo el código
go fmt ./...
# Análizar código estático
go vet ./...
# Ejecutar todos los main.go encontrados
find . -name main.go -exec echo "Ejecutando: {}" \; -exec go run {} \;
# Verificar sintaxis sin ejecutar
find . -name main.go -exec go build -o /dev/null {} \;
# Detectar race conditions en concurrency examples
find 03-concurrency -name main.go -exec go run -race {} \;
## � Recursos adicionales
### Documentación oficial
- [Tour of Go](https://tour.golang.org/)
- [Effective Go](https://golang.org/doc/effective_go.html)
- [Go Code Review Comments](https://github.com/golang/go/wiki/CodeReviewComments)
- [Go Memory Model](https://golang.org/ref/mem)
### Libros recomendados
- "The Go Programming Language" - Alan Donovan
- "Concurrency in Go" - Katherine Cox-Buday
- "Go in Action" - William Kennedy
- "Clean Architecture in Go" - Robert Martin
### Herramientas útiles
- [Go Playground](https://play.golang.org/)
- [Go by Example](https://gobyexample.com/)
- [Awesome Go](https://github.com/avelino/awesome-go)
## 🤝 Contribuir
1. Fork el repositorio
2. Crea una rama para tu feature (`git checkout -b feature/amazing-pattern`)
3. Commit tus cambios (`git commit -m 'Add amazing pattern'`)
4. Push a la rama (`git push origin feature/amazing-pattern`)
5. Abre un Pull Request
## 📄 Licencia
Este proyecto está bajo la Licencia MIT. Ver el archivo [LICENSE](LICENSE) para más detalles.
---
**¡Happy Coding!** 🎉
> "Don't communicate by sharing memory; share memory by communicating." - Rob Pike