¡Aprende a Programar con Go!
Una introducción práctica y amigable para principiantes al lenguaje de programación Go. El curso está estructurado en lecciones pequeñas y manejables con un tema de exploración espacial, que cubre programación imperativa, tipos, funciones, métodos, colecciones, estado y concurrencia.
Lecciones
Descripción del curso
📚 Resumen del contenido
Una introducción práctica y amigable para principiantes al lenguaje de programación Go. El curso está estructurado en lecciones pequeñas y manejables con un tema de exploración espacial, cubriendo programación imperativa, tipos, funciones, métodos, colecciones, estado y concurrencia.
Descubre el placer de programar con Go a través de lecciones breves y siete proyectos finales centrados en viajes espaciales.
Autor: Nathan Youngman, Roger Peppé
Agradecimientos: Jennifer Stout, Marina Michaels, Matthew Merkes, Joel Kotarski, Aleksandar Dragosavljević, Renée French, Olga Shalakhina, Erick Zelaya, April Milne, Monica Kamsvaag.
🎯 Objetivos de aprendizaje
- Definir el lenguaje de programación Go y sus casos de uso principales.
- Explicar el papel del compilador de Go y sus ventajas frente a los intérpretes.
- Navegar por el Playground de Go para escribir, compilar y ejecutar código.
- Estructurar correctamente el código Go usando el estilo obligatorio de "una sola llave verdadera" para evitar errores de sintaxis.
- Gestionar datos mediante diversas técnicas de declaración de variables y operadores de asignación aritmética.
- Generar números pseudoaleatorios e implementar lógica condicional usando bifurcaciones y operadores lógicos.
- Declarar y formatear variables de punto flotante usando
float32yfloat64con ancho y precisión específicos. - Identificar y mitigar errores causados por inexactitudes de punto flotante y desbordamiento de enteros.
- Utilizar el paquete
bigy constantes sin tipo para manejar números que superan los límites estándar de bits. - Definir e invocar funciones usando parámetros, argumentos y sintaxis variádica.
🔹 Lección 1: Despegando hacia la órbita
Resumen: Esta lección presenta Go, el lenguaje de programación contemporáneo para la computación en la nube. Los estudiantes aprenderán la diferencia fundamental entre el carácter compilado de Go y los lenguajes interpretados, cómo usar el Playground de Go para experimentar de inmediato y la estructura básica de un programa Go que incluye paquetes y la función main.
Resultados de aprendizaje:
- Definir el lenguaje de programación Go y sus casos de uso principales.
- Explicar el papel del compilador de Go y sus ventajas frente a los intérpretes.
- Navegar por el Playground de Go para escribir, compilar y ejecutar código.
🔹 Lección 2: Lógica de Control de Misión
Resumen: Esta lección introduce los bloques fundamentales de la programación en Go, centrándose en cómo estructurar el código y controlar su ejecución. Los estudiantes aprenderán el estilo "una sola llave verdadera", puntos de entrada de programas, avanzarán a cortesías de declaración de variables y operadores matemáticos, y finalizarán con lógica de toma de decisiones usando booleanos, comparaciones y bifurcaciones.
Resultados de aprendizaje:
- Estructurar correctamente el código Go usando el estilo obligatorio de "una sola llave verdadera" para evitar errores de sintaxis.
- Gestionar datos mediante diversas técnicas de declaración de variables y operadores de asignación aritmética.
- Generar números pseudoaleatorios e implementar lógica condicional usando bifurcaciones y operadores lógicos.
🔹 Lección 3: La física de los datos espaciales
Resumen: Esta lección explora cómo Go maneja los datos numéricos, desde la precisión fraccional de los números de punto flotante hasta las escalas masivas necesarias para distancias astronómicas. Los estudiantes aprenderán a gestionar las limitaciones de la memoria de la computadora, incluyendo inexactitudes de punto flotante y desbordamiento de enteros, mientras dominan la conversión explícita de tipos y el uso del paquete big para tamaños numéricos "inusuales".
Resultados de aprendizaje:
- Declarar y formatear variables de punto flotante usando
float32yfloat64con ancho y precisión específicos. - Identificar y mitigar errores causados por inexactitudes de punto flotante y desbordamiento de enteros.
- Utilizar el paquete
bigy constantes sin tipo para manejar números que superan los límites estándar de bits.
🔹 Lección 4: Construcción de módulos modulares
Resumen: Esta lección cubre los bloques fundamentales de los programas Go: funciones, tipos personalizados y métodos. Los estudiantes aprenderán a encapsular lógica para reutilizarla, definir nuevos tipos con comportamientos específicos y aprovechar funciones de primer nivel —incluyendo cierres y funciones anónimas— para crear código flexible y modular. La lección concluye con un proyecto práctico final que involucra tablas de conversión de temperatura.
Resultados de aprendizaje:
- Definir e invocar funciones usando parámetros, argumentos y sintaxis variádica.
- Distinguir entre identificadores exportados y no exportados usando las convenciones de nombres de Go.
- Crear tipos personalizados y asociarles comportamientos usando métodos y receptores.
🔹 Lección 5: Equipando la bodega de carga
Resumen: Esta lección aborda las estructuras de datos esenciales en Go para gestionar colecciones de información. Transita desde matrices de longitud fija y su comportamiento de copia en memoria hasta slices dinámicos que actúan como ventanas flexibles sobre los datos, y finalmente a mapas para búsquedas clave-valor eficientes. La unidad culmina en el proyecto final "Juego de la Vida", que demuestra cómo usar slices multidimensionales para simular sistemas complejos.
Resultados de aprendizaje:
- Declarar, inicializar e iterar matrices de longitud fija y cuadrículas multidimensionales.
- Manipular slices usando rangos de índices y crecimiento dinámico mediante la función
append. - Gestionar la eficiencia de memoria al distinguir entre longitud y capacidad, y preasignar colecciones con
make.
🔹 Lección 6: Estructurando hábitats marcianos
Resumen: Esta lección presenta el enfoque de Go para organizar datos y comportamientos complejos. Los estudiantes aprenderán a agrupar tipos de datos diversos en estructuras (structs), inicializarlas usando literales compuestos y gestionar su comportamiento mediante métodos y funciones constructoras. La lección también explora la filosofía de diseño única de Go: favorecer la composición sobre la herencia y usar interfaces implícitas para lograr polimorfismo.
Resultados de aprendizaje:
- Definir, inicializar y copiar estructuras para gestionar datos complejos de coordenadas marcianas y rovers.
- Codificar estructuras de Go en formato JSON usando etiquetas de struct para intercambio de datos personalizado.
- Implementar métodos, funciones constructoras y anidamiento de structs para construir código reutilizable y organizado.
🔹 Lección 7: Navegando el agujero del gopher
Resumen: Esta lección explora el poder y la seguridad de la indirección en Go, centrándose en cómo los punteros permiten una mutación de datos eficiente y un manejo adecuado de memoria. Proporciona un marco sólido para programación defensiva enseñando a los estudiantes a manejar valores nil, gestionar recursos con defer y aplicar patrones idiomáticos de manejo de errores —culminando en la aplicación de estas reglas a un motor de validación de Sudoku.
Resultados de aprendizaje:
- Usar el símbolo
&y el asterisco*para gestionar direcciones de memoria y desreferenciar valores. - Implementar parámetros y receptores de puntero para permitir la mutación de datos en funciones y métodos.
- Navegar valores
nilen slices, maps e interfaces sin provocar fallos en tiempo de ejecución.
🔹 Lección 8: Comunicaciones multirover
Resumen: Esta lección introduce los primitivos centrales de concurrencia en Go: goroutines y canales. Explora cómo ejecutar tareas de forma independiente, comunicarse de forma segura entre ellas y gestionar el estado compartido usando Mutexes para evitar condiciones de carrera. La lección concluye con un proyecto final que simula rovers marcianos navegando una cuadrícula y reportando descubrimientos.
Resultados de aprendizaje:
- Iniciar y gestionar tareas concurrentes usando la palabra clave
go. - Implementar comunicación segura entre goroutines usando canales y la sentencia
select. - Construir pipelines de datos y gestionar ciclos de vida de goroutines cerrando canales.