Recorrido
Aprende Go (Golang)
Un curso online de Go gratis e interactivo. Escribes Go en cada lección — sintaxis, structs, slices, interfaces, goroutines, channels — con pistas de IA cuando la concurrencia se pone rara, y un certificado gratis al terminar.
20,998+ codders inscritos
- Apto para principiantes
Ayuda de codificación con IA
Lecciones interactivas prácticas
Narración de audio en cada lección
Cuestionarios para poner a prueba tu conocimiento
Certificado gratuito de finalización
Programa
Sección 1
Fundamentos
Empezar secciónEmpezarExpandirContraerConstruye una base sólida con conceptos esenciales y habilidades básicasIntroducción a Go
4 lecciones423- 01¿Qué es Go?Reto
- 02Hola MundoRetoQuizAudio
- 03PrintlnRetoQuizAudio
- 04Comentarios en GoRetoQuizAudio
Variables y tipos de datos básicos
10 lecciones1069- 01¿Qué es una variable?RetoQuizAudio
- 02Inferencia de tipos con `:=`RetoQuizAudio
- 03Enteros (int)RetoQuizAudio
- 04Números de punto flotanteRetoQuizAudio
- 05BooleanosRetoQuizAudio
- 06StringsRetoQuizAudio
- 07Valores ceroRetoQuizAudio
- 08ConstantesRetoQuizAudio
- 09Convenciones de nomenclaturaRetoQuizAudio
- 10Resumen - Variables y tiposReto
Operadores básicos
7 lecciones744- 01Operadores aritméticosRetoQuizAudio
- 02Operador de divisiónRetoQuizAudio
- 03El operador móduloRetoQuizAudio
- 04Operador de asignaciónRetoQuizAudio
- 05Operadores de asignación compuestaRetoQuizAudio
- 06Incremento y decrementoRetoQuizAudio
- 07Resumen - CálculosReto
Operadores de comparación y lógicos
7 lecciones742- 01Operadores de comparación - Parte 1RetoQuizAudio
- 02Operadores de comparación - Parte 2RetoQuizAudio
- 03Operador lógico ANDRetoQuizAudio
- 04Operador lógico ORRetoQuizAudio
- 05Operador lógico NOTRetoQuizAudio
- 06Conceptos básicos de precedencia de operadoresRetoQuizAudio
- 07Resumen: Realizar comparacionesReto
Entrada y salida básica
5 lecciones532- 01Salida con formatoRetoQuizAudio
- 02Verbos de formatoRetoQuizAudio
- 03Impresión de tiposRetoQuizAudio
- 04Obtener entrada básica del usuarioRetoQuizAudio
- 05Resumen: Entrada y salidaReto
Flujo de control: Condicionales
10 lecciones1069- 01La sentencia `if`RetoQuizAudio
- 02La palabra clave `else`RetoQuizAudio
- 03La palabra clave `else if`RetoQuizAudio
- 04Sombreado de variables en `if`RetoQuizAudio
- 05Inicialización de variablesRetoQuizAudio
- 06La sentencia `switch`RetoQuizAudio
- 07`switch` con expresionesRetoQuizAudio
- 08`switch` sin expresiónRetoQuizAudio
- 09La palabra clave `fallthrough`RetoQuizAudio
- 10Resumen: Toma de decisionesReto
Flujo de control: Bucles
7 lecciones743- 01Explicación del bucle `for`RetoQuizAudio
- 02Bucle `for` - BásicoRetoQuizAudio
- 03Bucle `for` - Solo condiciónRetoQuizAudio
- 04La palabra clave `break`RetoQuizAudio
- 05La palabra clave `continue`RetoQuizAudio
- 06Bucles anidadosRetoQuizAudio
- 07Resumen - Repetición de accionesReto
Funciones
9 lecciones962- 01Comprendiendo las funcionesRetoQuizAudio
- 02Declaración de una funciónRetoQuizAudio
- 03Llamada a funcionesRetoQuizAudio
- 04Parámetros de funciónRetoQuizAudio
- 05Retorno de un solo valorRetoQuizAudio
- 06Retorno de múltiples valoresRetoQuizAudio
- 07Valores de retorno con nombreRetoQuizAudio
- 08Conceptos básicos del alcance de las funcionesRetoQuizAudio
- 09Resumen: Creando código reutilizableReto
Punteros
7 lecciones644- 01¿Qué es un puntero?QuizAudio
- 02Declaración de variables de punteroRetoQuizAudio
- 03El operador de dirección (Address-Of)RetoQuizAudio
- 04Desreferenciación de punterosRetoQuizAudio
- 05Uso de punteros en funcionesRetoQuizAudio
- 06Punteros NilRetoQuizAudio
- 07Resumen: Entendiendo los punterosReto
Tipos compuestos: Arrays
7 lecciones650- 01Introducción a los ArraysQuizAudio
- 02Declaración de ArraysRetoQuizAudio
- 03Inicialización de ArraysRetoQuizAudio
- 04Acceso a elementos de un ArrayRetoQuizAudio
- 05Longitud del Array con `len`RetoQuizAudio
- 06Iterar sobre ArraysRetoQuizAudio
- 07Arrays multidimensionalesRetoQuizAudio
Tipos compuestos: Slices
10 lecciones965- 01Introducción a los SlicesQuizAudio
- 02Declaración de literales de SliceRetoQuizAudio
- 03Creación de Slices con `make`RetoQuizAudio
- 04Longitud vs. Capacidad de un SliceRetoQuizAudio
- 05Acceso a los elementos del SliceRetoQuizAudio
- 06Añadir elementosRetoQuizAudio
- 07Slicing de Slices/Arrays existentesRetoQuizAudio
- 08Iterar sobre SlicesRetoQuizAudio
- 09Copiar SlicesRetoQuizAudio
- 10Resumen - Listas dinámicasReto
Tipos compuestos: Mapas
10 lecciones965- 01Introducción a los MapasQuizAudio
- 02Declaración de literales de mapaRetoQuizAudio
- 03Creación de mapas con `make`RetoQuizAudio
- 04Añadir y actualizar clave-valorRetoQuizAudio
- 05Acceso a los valores del mapaRetoQuizAudio
- 06Comprobar la existencia de clavesRetoQuizAudio
- 07Eliminar entradas del mapaRetoQuizAudio
- 08Longitud del mapaRetoQuizAudio
- 09Iterar sobre mapasRetoQuizAudio
- 10Resumen - Almacenamiento clave-valorReto
Tipos compuestos: Structs
8 lecciones854- 01Definición de tipos personalizadosRetoQuizAudio
- 02Creación de instancias de StructsRetoQuizAudio
- 03Acceso a campos de StructsRetoQuizAudio
- 04Punteros a StructsRetoQuizAudio
- 05Inicialización de StructsRetoQuizAudio
- 06Structs embebidosRetoQuizAudio
- 07Structs anónimosRetoQuizAudio
- 08Resumen - Estructuras de datos personalizadasReto
Manejo básico de errores
8 lecciones858- 01El concepto de erroresRetoQuizAudio
- 02La interfaz `error`RetoQuizAudio
- 03Funciones que devuelven erroresRetoQuizAudio
- 04Comprobación de erroresRetoQuizAudio
- 05Creación de errores simplesRetoQuizAudio
- 06Creación de errores con formatoRetoQuizAudio
- 07Manejo básico de erroresRetoQuizAudio
- 08Resumen: Manejo de problemasReto
Sección 2
Lógica y Flujo
Empezar secciónEmpezarExpandirContraerDomina la programación avanzada en Go con un enfoque en estructuras de datos y control de flujo. Aprende a trabajar con arrays complejos, colecciones, manejo de errores y gestión del tiempo.Flujo de control avanzado
5 lecciones528- 01Switch con `fallthrough`RetoQuiz
- 02Salir de bucles anidadosRetoQuiz
- 03Continuar un bucle específicoRetoQuiz
- 04La sentencia `goto`RetoQuiz
- 05Repaso: Control de bucles avanzadoReto
Estructuras y Métodos
6 lecciones439- 01Definición de métodos en estructurasRetoQuiz
- 02Receptores de valorRetoQuiz
- 03Receptores de punteroRetoQuiz
- 04Elegir receptoresQuiz
- 05Métodos vs FuncionesQuiz
- 06Resumen - Comportamiento de estructurasReto
Interfaces (Conceptos básicos)
8 lecciones757- 01¿Qué es una interfaz?Quiz
- 02Definir una interfazRetoQuiz
- 03Implementar una interfazRetoQuiz
- 04Uso de tipos de interfazRetoQuiz
- 05Interfaz vacíaRetoQuiz
- 06Aserciones de tipoRetoQuiz
- 07Type SwitchRetoQuiz
- 08Resumen: Formas y comportamientosReto
Proyecto: Lista de tareas sencilla
Proyecto6 lecciones1- 01Configuración del proyectoReto
- 02Añadir una tareaProyecto
- 03Ver todas las tareasProyecto
- 04Completar una tareaProyecto
- 05Eliminar una tareaProyecto
- 06Poniéndolo todo juntoProyecto
Mapas en profundidad
5 lecciones432- 01Mapas de StructsRetoQuiz
- 02Punteros como valores de MapRetoQuiz
- 03Verificación de Maps NilRetoQuiz
- 04Comparación de MapsQuiz
- 05Resumen - Contador de frecuencia de palabrasReto
Go idiomático: Sets
7 lecciones648- 01El modismo de Set en GoQuiz
- 02Crear un SetRetoQuiz
- 03Añadir a un SetRetoQuiz
- 04Comprobar pertenenciaRetoQuiz
- 05Eliminar de un SetRetoQuiz
- 06Iterar sobre un SetRetoQuiz
- 07Resumen: Nombres de usuario únicosReto
Manejo de errores a fondo
7 lecciones650- 01Tipos de error personalizadosRetoQuiz
- 02Envolver errores con `%w`RetoQuiz
- 03Desenvolver con `errors.Is`RetoQuiz
- 04Desenvolver con `errors.As`RetoQuiz
- 05Entendiendo `panic`Quiz
- 06Uso de `recover`RetoQuiz
- 07Repaso - División seguraReto
Proyecto: Inventario simple
Proyecto6 lecciones1- 01Descripción general del proyectoReto
- 02Verificar el stockProyecto
- 03Añadir un nuevo artículoProyecto
- 04Actualizar la cantidad de stockProyecto
- 05Generar un informeProyecto
- 06Poniéndolo todo juntoProyecto
Paquetes y Ámbito
7 lecciones550- 01¿Qué es un paquete?Quiz
- 02Exportado vs. No exportadoRetoQuiz
- 03Crear un paquete simpleRetoQuiz
- 04Alias de paquetesRetoQuiz
- 05El identificador en blanco `_`Quiz
- 06La función `init`RetoQuiz
- 07Repaso - Construir una utilidadReto
Trabajando con el tiempo
8 lecciones857- 01Obtener la hora actualRetoQuiz
- 02Crear una hora específicaRetoQuiz
- 03Formatear el tiempoRetoQuiz
- 04Parsing de cadenas de tiempoRetoQuiz
- 05Duración del tiempoRetoQuiz
- 06Aritmética de tiempoRetoQuiz
- 07Sleeping y TickersRetoQuiz
- 08Resumen - Temporizador simpleReto
Desafíos finales
3 lecciones3- 01Lista de contactos básicaReto
- 02Validador de números simpleReto
- 03Colector de elementos únicosReto
Sección 3
Programación Orientada a Objetos
Empezar secciónEmpezarExpandirContraerDescubre cómo organizar el código con clases, objetos y estructuras reutilizablesFundamentos de POO en Go
11 lecciones1189- 01Archivos externosRetoQuiz
- 02Espacio de trabajo y módulos de GoRetoQuiz
- 03Paquetes e importacionesRetoQuiz
- 04Nombres exportados vs. no exportadosRetoQuiz
- 05Introducción a la POO en GoRetoQuiz
- 06Structs como clasesRetoQuiz
- 07Definición de métodos en structsRetoQuiz
- 08Receptores de puntero vs. de valorRetoQuiz
- 09Inicialización de structsRetoQuiz
- 10Funciones constructorasRetoQuiz
- 11Resumen - Calculadora simpleReto
Inmersión profunda en Tipos y Structs
7 lecciones752- 01Tipos básicos y compuestosRetoQuiz
- 02Definiciones de tipos personalizadosRetoQuiz
- 03Etiquetas de StructsRetoQuiz
- 04Structs anónimosRetoQuiz
- 05Structs anidadosRetoQuiz
- 06Valores cero y por defectoRetoQuiz
- 07Repaso - Libreta de contactosReto
Punteros y Memoria
6 lecciones644- 01Fundamentos de punteros en GoRetoQuiz
- 02Punteros a StructsRetoQuiz
- 03Paso por valor vs referenciaRetoQuiz
- 04La función new()RetoQuiz
- 05Garbage Collection en GoRetoQuiz
- 06Resumen - Constructor de Linked ListReto
Interfaces
9 lecciones969- 01Introducción a las interfacesRetoQuiz
- 02Implementación implícitaRetoQuiz
- 03La interfaz como contratoRetoQuiz
- 04Interfaz vacía (any)RetoQuiz
- 05Type AssertionRetoQuiz
- 06Type SwitchRetoQuiz
- 07Composición de interfacesRetoQuiz
- 08Interfaces Stringer y ErrorRetoQuiz
- 09Resumen: Calculadora de figurasReto
Composición sobre herencia
7 lecciones749- 01Por qué Go no tiene herenciaRetoQuiz
- 02Conceptos básicos de incrustación de structsRetoQuiz
- 03Promoción de métodosRetoQuiz
- 04Incrustación de múltiples structsRetoQuiz
- 05Incrustación vs AgregaciónRetoQuiz
- 06Shadowing de métodos incrustadosRetoQuiz
- 07Resumen - Jerarquía de empleadosReto
Polimorfismo en Go
6 lecciones643- 01Polimorfismo mediante interfacesRetoQuiz
- 02Duck Typing en GoRetoQuiz
- 03Reglas de satisfacción de interfacesRetoQuiz
- 04Colecciones polimórficasRetoQuiz
- 05Inyección de dependenciasRetoQuiz
- 06Resumen - Procesador de pagosReto
Encapsulamiento
5 lecciones536- 01Campos exportados vs. no exportadosRetoQuiz
- 02Encapsulamiento a nivel de paqueteRetoQuiz
- 03Métodos Getter y SetterRetoQuiz
- 04Ocultamiento de información en GoRetoQuiz
- 05Resumen - Registros de estudiantesReto
Manejo de Errores y OOP
7 lecciones754- 01La interfaz errorRetoQuiz
- 02Tipos de errores personalizadosRetoQuiz
- 03Envoltura de errores (fmt.Errorf)RetoQuiz
- 04Errores centinelaRetoQuiz
- 05errors.Is() y errors.As()RetoQuiz
- 06Panic, Defer y RecoverRetoQuiz
- 07Resumen - Analizador de archivosReto
Concurrencia y POO
8 lecciones863- 01Fundamentos de GoroutinesRetoQuiz
- 02Channels y comunicaciónRetoQuiz
- 03Channels con buffer vs. sin bufferRetoQuiz
- 04Sentencia SelectRetoQuiz
- 05sync.Mutex y sync.RWMutexRetoQuiz
- 06sync.WaitGroupRetoQuiz
- 07Diseño de estructuras Thread-SafeRetoQuiz
- 08Resumen - Worker PoolReto
Genéricos (Go 1.18+)
6 lecciones645- 01Introducción a los GenéricosRetoQuiz
- 02Parámetros de tipoRetoQuiz
- 03Restricciones de tipoRetoQuiz
- 04Structs genéricosRetoQuiz
- 05Solución alternativa para métodos genéricosRetoQuiz
- 06Resumen - Colección genéricaReto
Biblioteca estándar y POO
6 lecciones644- 01io.Reader e io.WriterRetoQuiz
- 02Interfaz sort.InterfaceRetoQuiz
- 03Interfaz fmt.StringerRetoQuiz
- 04encoding/json con StructsRetoQuiz
- 05Interfaz http.HandlerRetoQuiz
- 06Repaso - Modelos de REST APIReto
Conceptos avanzados de POO
6 lecciones655- 01Patrón Functional OptionsRetoQuiz
- 02Patrón Builder en GoRetoQuiz
- 03Encadenamiento de métodosRetoQuiz
- 04Alias de tipos vs. definicionesRetoQuiz
- 05Fundamentos de ReflectionRetoQuiz
- 06Descripción general de generación de códigoRetoQuiz
Patrones de diseño - Parte 1
6 lecciones651- 01Introducción a los patrones de diseñoRetoQuiz
- 02Patrón SingletonRetoQuiz
- 03Patrón FactoryRetoQuiz
- 04Patrón Abstract FactoryRetoQuiz
- 05Patrón ObserverRetoQuiz
- 06Patrón StrategyRetoQuiz
Patrones de diseño Parte 2
7 lecciones764- 01Patrón CommandRetoQuiz
- 02Patrón AdapterRetoQuiz
- 03Patrón DecoratorRetoQuiz
- 04Patrón Template MethodRetoQuiz
- 05Patrón StateRetoQuiz
- 06Patrón CompositeRetoQuiz
- 07Middleware como DecoratorRetoQuiz
Proyecto: Gestión de bibliotecas
Proyecto7 lecciones1- 01Descripción general y estructura del proyectoReto
- 02Structs de libros y usuariosProyecto
- 03Sistema de préstamosProyecto
- 04Búsqueda con interfacesProyecto
- 05Capa de persistencia JSONProyecto
- 06Interfaz CLI de administraciónProyecto
- 07Pruebas e integraciónProyecto
Desafíos finales
3 lecciones3- 01Plataforma de E-LearningReto
- 02Sistema bancarioReto
- 03Sistema de personajes de juegoReto
Por qué aprender Go (Golang) con Coddy
- Escribe y ejecuta código Go real en tu navegador. Sin instalar el toolchain de Go ni configurar GOPATH. Cada lección compila tu programa de Go en el servidor y muestra la salida al instante.
- Go idiomático: packages, structs, slices y maps, interfaces, manejo de errores, goroutines, channels. Los patrones de Go que de verdad usarías para construir backends y CLIs.
- Las pistas de IA te ayudan a depurar tu código Go y a desenredar bugs con goroutines y channels sin arruinarte la respuesta, para que el modelo de concurrencia te haga clic en vez de confundirte.
- Certificado gratis de Golang al terminar. Una señal creíble para puestos de backend, infraestructura cloud y DevOps, donde el dominio de Go es cada vez más esperado.
Preguntas frecuentes sobre aprender Go (Golang)
¿Go (Golang) es fácil de aprender?
Go es, a propósito, uno de los lenguajes modernos más simples. Especificación pequeña, sin herencia, sin la complejidad de los genéricos por defecto y una librería estándar sólida. La mayoría de los principiantes logra su primer programa de Go funcionando en la primera hora y empieza a escribir goroutines en un par de semanas.
¿Para qué se usa Go (Golang)?
Servicios backend, infraestructura en la nube, CLIs y herramientas de DevOps. Docker, Kubernetes, Terraform y buena parte de la infraestructura cloud-native están escritos en Go. El lenguaje se diseñó para compilar rápido, manejar concurrencia con facilidad y generar un único binario estático, lo que lo hace ideal para servidores y herramientas de línea de comandos.
¿Cuánto tiempo toma aprender Go?
Los fundamentos de Go —sintaxis, funciones, structs, slices, maps— te toman de una a dos semanas de práctica diaria. Manejar con soltura interfaces, goroutines y channels suele llevar otras dos a seis semanas. Llegar a un nivel productivo en servicios reales en Go ya depende sobre todo de trabajar en un codebase de verdad.
¿Aprender Go o Python?
Elige según tu objetivo. Con Python te sientes productivo más rápido para trabajo con datos, scripting e IA. Go brilla en servicios backend, herramientas de infraestructura y en cualquier escenario donde quieras un binario rápido, tipado estáticamente y con concurrencia integrada. Ambos se complementan bien — muchos equipos de backend usan los dos.
¿Puedo aprender Golang online gratis?
Sí. El curso interactivo de Go es gratis — lecciones completas, ejercicios de código, cuestionarios y certificado. El compilador de Go corre del lado del servidor, así que no necesitas instalar Go localmente ni configurar GOPATH para empezar a programar.
¿Recibo un certificado al terminar el curso de Go?
Sí. Al terminar el curso de Go obtienes un certificado de finalización gratis que puedes agregar a tu currículum o compartir en LinkedIn. Una prueba verificable que complementa los proyectos en Go o los repos de GitHub que hayas armado.