Skip to content

HoracioEspinosa/go-learning

Repository files navigation

🚀 Go Learning Path - Patrones de Diseño y Conceptos Avanzados

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.

📚 Estructura Atómica

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

📖 Temario Completo

01. 🏗️ Patrones de Diseño (Design Patterns)

Patrones Creacionales

  • 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

Patrones Estructurales

  • 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

Patrones Comportamentales

02. 🔧 Fundamentos de Go

03. ⚡ Concurrencia y Paralelismo

Goroutines Básicas

Channels

Patrones Avanzados

04. 🚀 Temas Avanzados

05. 🌐 Desarrollo Web

06. 🧪 Testing y Benchmarking

07. 🗄️ Patrones de Base de Datos

08. 🔧 Rendimiento y Optimización

🎯 Cómo usar este repositorio

Prerrequisitos

  • Go 1.19+ instalado
  • Editor con soporte para Go (VS Code recomendado)
  • Git para clonar el repositorio

Ejecutar ejemplos

# 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'

Estructura de cada ejemplo

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

Progresión recomendada

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

🛠️ Comandos útiles

# 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

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published