Go

Go

Tutorial Go: Evaluación conocimientos Go

Go: Test de evaluación de conocimientos generales. Mide tus habilidades en Go desde conceptos básicos hasta avanzados, incluyendo concurrencia y desarrollo de APIs con net/http.

Aprende Go GRATIS y certifícate

Este ejercicio de evaluación está diseñado para medir tus conocimientos en Go y su ecosistema. Para rendir satisfactoriamente esta evaluación, es necesario que tengas un entendimiento sólido de los siguientes temas:

Temas a evaluar

Introducción a Go

  • Historia y filosofía de Go
  • Usos de Go en la actualidad
  • Comparativa de Go con otros lenguajes de programación

Instalación y primer programa de Go

  • Estructura básica de un programa Go
  • Compilación y ejecución
  • El paquete main y la función main
  • Paquetes e importaciones

Tipos de datos, variables y constantes

  • Declaración y asignación de variables
  • Tipos de datos primitivos: enteros, flotantes, booleanos, cadenas
  • Uso de constantes con la palabra clave const

Operadores y expresiones

  • Operadores aritméticos, lógicos y relacionales
  • Precedencia y asociatividad de operadores
  • Conversión y casting de tipos

Cadenas de texto y manipulación

  • Operaciones básicas con cadenas
  • Uso del paquete strings
  • Formateo y construcción de cadenas con fmt

Estructuras de control

  • Sentencias if, else if, else
  • Uso de switch y case

Control de flujo y estructuras de bucle

  • Uso del bucle for en sus distintas formas
  • Iteración sobre colecciones con range
  • Control de bucles con break y continue

Funciones

  • Definición y llamada de funciones
  • Parámetros, argumentos y valores de retorno
  • Valores de retorno múltiples y nombrados

Arrays y slices

  • Declaración y uso de arrays
  • Introducción y manejo de slices
  • Operaciones comunes: agregar, copiar, segmentar

Mapas

  • Creación y manipulación de mapas
  • Acceso y modificación de elementos
  • Detección de claves y eliminación de pares

Punteros y referencias

  • Concepto de punteros en Go
  • Operadores & (dirección) y * (indirección)
  • Punteros a tipos y seguridad de memoria

Estructuras (structs)

  • Definición y uso de structs
  • Campos anónimos y composición
  • Comparación con clases en otros lenguajes

Métodos con receptores por valor y por puntero

  • Asociar métodos a tipos definidos
  • Receptores por valor
  • Receptores por puntero
  • Encapsulación y acceso a datos
  • Modificación de estado en métodos

Polimorfismo a través de Interfaces

  • Cómo definir e implementar interfaces en Go
  • Polimorfismo basado en interfaces y cómo usarlo en lugar de herencia
  • Uso de interfaces vacías (interface{}) y su aplicación

Composición de structs en lugar de herencia

  • Incrustación de structs y cómo se logra la reutilización de código
  • Ejemplos de composición vs herencia clásica
  • Cómo la composición promueve la flexibilidad y evita problemas comunes de la herencia

Generics

  • Cómo definir funciones y tipos genéricos
  • Restricciones de tipos mediante type constraints
  • Ejemplos de uso de genéricos en estructuras de datos y funciones comunes

Manejo explícito de errores

  • Retorno de tipo error en funciones
  • Propagación de errores
  • Evitar el manejo de errores silencioso

Errores personalizados y wrapping para mejorar la trazabilidad

  • Creación de errores personalizados
  • Cómo envolver errores con fmt.Errorf
  • Uso de errors.Is y errors.As para desempaquetar y analizar errores complejos
  • Casos prácticos: cuándo y cómo aplicar wrapping de errores para depuración efectiva

Métodos HTTP con net/http

  • Realizar peticiones HTTP GET
  • Realizar peticiones HTTP POST
  • Realizar peticiones HTTP PUT y PATCH
  • Realizar peticiones HTTP DELETE

API REST con net/http

  • Configurar un API REST JSON sin framework
  • Recibir peticiones GET
  • Recibir peticiones POST
  • Realizar peticiones HTTP PUT y PATCH
  • Realizar peticiones HTTP DELETE

Goroutines y concurrencia básica

  • Cómo crear y manejar Goroutines
  • Uso de WaitGroups para gestionar ciclos de vida de las Goroutines
  • Ejemplos de ejecución concurrente utilizando Goroutines

Canales y comunicación entre Goroutines

  • Creación y uso de canales (unbuffered y buffered)
  • Cómo enviar y recibir datos entre Goroutines
  • Patrones comunes como el modelo productor-consumidor y Fan-in/Fan-out

Condiciones de carrera

  • Qué es una condición de carrera
  • Cómo detectar condiciones de carrera
  • Cómo solucionar condiciones de carrera

Selectores y Mutexes: Concurrencia y Exclusión Mutua

  • Uso del select para gestionar múltiples canales simultáneamente
  • Uso de mutexes para sincronización y evitar condiciones de carrera
  • Ejemplos de patrones concurrentes con selectores y protección de datos compartidos con mutexes
Aprende Go GRATIS online

Ejercicios de esta lección Evaluación conocimientos Go

Evalúa tus conocimientos de esta lección Evaluación conocimientos Go con nuestros retos de programación de tipo Test, Puzzle, Código y Proyecto con VSCode, guiados por IA.

Todas las lecciones de Go

Accede a todas las lecciones de Go y aprende con ejemplos prácticos de código y ejercicios de programación con IDE web sin instalar nada.

Accede GRATIS a Go y certifícate

Certificados de superación de Go

Supera todos los ejercicios de programación del curso de Go y obtén certificados de superación para mejorar tu currículum y tu empleabilidad.

En esta lección

Objetivos de aprendizaje de esta lección

  • Comprender la historia y filosofía de Go.
  • Manejar la sintaxis y estructura básica de programas en Go.
  • Utilizar tipos de datos, variables, constantes y operadores.
  • Manipular cadenas de texto y formatear salidas.
  • Implementar estructuras de control y bucles.
  • Definir y usar funciones con parámetros y retornos múltiples.
  • Trabajar con arrays, slices y mapas.
  • Entender y aplicar punteros y referencias.
  • Crear structs y métodos asociados.
  • Implementar interfaces y aplicar polimorfismo.
  • Usar generics para funciones y tipos genéricos.
  • Manejar errores de forma explícita y crear errores personalizados.
  • Desarrollar aplicaciones HTTP utilizando el paquete net/http.
  • Implementar concurrencia con goroutines y canales.
  • Detectar y resolver condiciones de carrera.
  • Sincronizar código concurrente utilizando selectores y mutexes.