Curso de programación con Go
Go es el lenguaje de programación creado por Google para desarrollar software eficiente y escalable. Aprende a programar en Go y optimiza tus proyectos.
Go, también conocido como Golang, es un lenguaje de programación de código abierto desarrollado en 2009 por ingenieros de Google, incluyendo a Robert Griesemer, Rob Pike y Ken Thompson. Diseñado para combinar la facilidad de programación de lenguajes interpretados como Python con la eficiencia y seguridad de lenguajes compilados como C o C++, Go ha ganado popularidad por su simplicidad, rendimiento y soporte nativo para la concurrencia.
Características principales
Sintaxis simple y clara
Go presenta una sintaxis minimalista que facilita la lectura y escritura del código. La convención de estilo es estricta y está reforzada por herramientas integradas como gofmt
, que formatea el código de manera consistente.
Compilación rápida
El compilador de Go es notablemente rápido, lo que agiliza el ciclo de desarrollo. Esto se logra gracias a un sistema de compilación eficiente que evita la recompilación innecesaria y a la ausencia de una jerarquía de clases compleja.
Soporte nativo para concurrencia
Una de las características distintivas de Go es su modelo de concurrencia basado en gorutinas y canales:
- Gorutinas: Son hilos ligeros administrados por el propio runtime de Go, lo que permite ejecutar miles de gorutinas simultáneamente con un overhead mínimo.
- Canales: Facilitan la comunicación segura y sincronizada entre gorutinas, promoviendo un estilo de programación concurrente más seguro y menos propenso a errores.
Recolección de basura
Go incluye un recolector de basura que maneja automáticamente la gestión de memoria, reduciendo el riesgo de fugas de memoria y errores relacionados con la liberación manual de recursos.
Sistema de tipos estático pero flexible
Aunque Go es un lenguaje de tipado estático, su sistema de tipos ha evolucionado para ser más flexible con la introducción de genéricos en la versión 1.18. Los genéricos permiten escribir funciones y tipos que pueden trabajar con cualquier tipo de datos, aumentando la reutilización de código y manteniendo la seguridad en tiempo de compilación.
Por ejemplo, una función genérica para encontrar el elemento máximo en un slice:
func Max[T constraints.Ordered](slice []T) T {
max := slice[0]
for _, v := range slice {
if v > max {
max = v
}
}
return max
}
Bibliotecas estándar ricas
La biblioteca estándar de Go es extensa y bien diseñada, ofreciendo paquetes para tareas comunes como manejo de archivos, networking, criptografía y servicios web, lo que reduce la necesidad de dependencias externas.
Diferencias con otros lenguajes
Comparación con C y C++
- Simplicidad: Go evita características complejas como herencia múltiple, plantillas y punteros aritméticos, lo que simplifica el proceso de desarrollo.
- Seguridad de memoria: Go previene muchos errores comunes de C/C++ relacionados con la gestión manual de memoria.
- Concurrencia integrada: A diferencia de C/C++, Go proporciona primitivas de concurrencia a nivel de lenguaje.
Comparación con Java
- Sin máquina virtual: Go compila a código máquina nativo, eliminando la necesidad de una máquina virtual y mejorando el rendimiento.
- Modelo de concurrencia: Go utiliza gorutinas y canales en lugar de hilos pesados y mecanismos de sincronización más complejos.
- Sintaxis y estructura: Go carece de jerarquías de clases y utiliza composiciones sobre la herencia clásica, resultando en un diseño más plano y modular.
Comparación con Python
- Rendimiento: Go es significativamente más rápido debido a su compilación a código nativo.
- Tipado estático: A diferencia del tipado dinámico de Python, Go utiliza tipado estático, lo que permite detectar errores en tiempo de compilación.
- Concurrencia: Go maneja la concurrencia de manera más eficiente y segura que Python, especialmente en aplicaciones de red y sistemas distribuidos.
Ejemplo de código: servidor web simple
A continuación se presenta un ejemplo de un servidor web básico en Go:
package main
import (
"fmt"
"log"
"net/http"
)
func escribeHolaHandler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hola, mundo!")
}
func main() {
http.HandleFunc("/", escribeHolaHandler)
log.Println("Servidor escuchando en el puerto 8080")
if err := http.ListenAndServe(":8080", nil); err != nil {
log.Fatalf("Error iniciando el servidor: %v", err)
}
}
Este código inicia un servidor HTTP que responde "Hola, mundo!" a cualquier solicitud en la raíz (/
). Utiliza el paquete net/http
de la biblioteca estándar, demostrando la sencillez con la que se pueden crear servicios web en Go.
Casos de uso comunes
- Desarrollo de APIs y servicios web: Gracias a su rendimiento y biblioteca estándar, Go es ideal para construir microservicios y APIs RESTful.
- Herramientas de red y sistemas distribuidos: El soporte nativo para concurrencia y networking hace que Go sea adecuado para desarrollar proxies, balanceadores de carga y otros componentes de infraestructura.
- Aplicaciones de alto rendimiento: Proyectos que requieren eficiencia y escalabilidad pueden beneficiarse del modelo de concurrencia de Go y su ejecución rápida.
- Desarrollo de herramientas y utilidades: La rapidez en compilación y ejecución de Go lo hace apropiado para crear herramientas de línea de comandos y utilidades del sistema.
Gestión de dependencias
Go utiliza módulos para la gestión de dependencias, introducidos oficialmente en la versión 1.11 y mejorados en versiones posteriores. Los módulos permiten especificar versiones precisas de las dependencias, facilitando la reproducibilidad y el control del entorno de construcción.
La versión 1.21 de Go ha mejorado aún más el sistema de módulos, incorporando características como la verificación de firmas digitales para garantizar la integridad de los paquetes.
Comunidad y ecosistema
La comunidad de Go es activa y creciente. Existen numerosos paquetes de terceros disponibles a través de repositorios como pkg.go.dev
, y se organizan conferencias y encuentros regularmente. Además, compañías importantes como Google, Docker y Kubernetes utilizan Go en sus proyectos.
Tutoriales de Go
Aprende Go con tutoriales de programación en Go.
Introducción A Go
Introducción Y Entorno
Instalación Y Primer Programa De Go
Introducción Y Entorno
Tipos De Datos, Variables Y Constantes
Sintaxis
Operadores Y Expresiones
Sintaxis
Cadenas De Texto Y Manipulación
Sintaxis
Estructuras De Control
Sintaxis
Control De Flujo Y Estructuras De Bucle
Sintaxis
Funciones
Sintaxis
Arrays Y Slices
Estructuras De Datos
Mapas
Estructuras De Datos
Punteros Y Referencias
Estructuras De Datos
Estructuras Structs
Programación Orientada A Objetos
Métodos Con Receptores Por Valor Y Por Puntero
Programación Orientada A Objetos
Polimorfismo A Través De Interfaces
Programación Orientada A Objetos
Composición De Structs En Lugar De Herencia
Programación Orientada A Objetos
Generics
Programación Orientada A Objetos
Manejo Explícito De Errores
Manejo De Errores Y Excepciones
Errores Personalizados Y Trazabilidad
Manejo De Errores Y Excepciones
Métodos Http Con Net/http
Comunicación Por Http
Api Rest Con Net/http
Comunicación Por Http
Goroutines Y Concurrencia Básica
Concurrencia Y Paralelismo
Canales Y Comunicación Entre Goroutines
Concurrencia Y Paralelismo
Condiciones De Carrera
Concurrencia Y Paralelismo
Selectores Y Mutexes Concurrencia Y Exclusión Mutua
Concurrencia Y Paralelismo
Evaluación Conocimientos Go
Evaluación
Ejercicios de programación de Go
Evalúa tus conocimientos en Go con ejercicios de programación Go de tipo Test, Puzzle, Código y Proyecto con VSCode.
Cadenas de texto y manipulación
Selectores y mutexes: concurrencia y exclusión
Agenda de contactos por consola
Composición de structs en lugar de herencia
Estructuras de control
Arrays y slices
Control de flujo y estructuras de bucle
Sistema API REST gestión de libros
Métodos con receptores por valor y por puntero
API REST con net/http
Generics
Evaluación Go
Métodos HTTP con net/http
Crear e invocar funciones
Operadores y expresiones
Polimorfismo a través de Interfaces
Manejo explícito de errores
Estructuras structs
Tipos de datos, variables y constantes
Introducción a Go
Canales y comunicación entre Goroutines
Condiciones de carrera
Punteros y referencias
Goroutines y concurrencia básica
Instalación Go primer programa
Errores personalizados y trazabilidad
Estructuras de datos Mapas
Cliente de API OpenWeatherMap clima
Tipo de tecnología
Lenguaje
Categoría laboral
Backend
Año de lanzamiento
2009
Developers
Todos los módulos de Go
Go
Introducción y entorno
Go
Sintaxis
Go
Estructuras de datos
Go
Programación Orientada a Objetos
Go
Manejo de errores y excepciones
Go
Comunicación por HTTP
Go
Concurrencia y paralelismo
Go
Evaluación
Otras tecnologías
Vuejs
Vuejs
Frontend
Framework de JS progresivo para construir interfaces de usuario reactivas y modulares.
Selenium
Selenium
Testing / QA (Quality Assurance)
Suite de herramientas open-source para automatizar navegadores web y pruebas de software de interfaz de usuario.
TypeScript
TypeScript
Full Stack
Superconjunto de JavaScript con tipado estático.
Java
Java
Backend
Lenguaje de programación versátil y multiplataforma.
Seaborn
Seaborn
Ciencia de Datos e Inteligencia artificial
Biblioteca de visualización de datos para Python.
CSharp
CSharp
Backend
Lenguaje de programación de Microsoft para aplicaciones robustas.
SpringBoot
SpringBoot
Backend
Framework para desarrollo rápido de aplicaciones Java.
Nest
Nest
Backend
Framework Node.js para crear aplicaciones escalables y eficientes.
Git
Git
DevOps
Sistema de control de versiones distribuido.
React
React
Frontend
Librería framework para frontend interfaces de usuario.
Docker
Docker
DevOps
Plataforma de contenedores para aplicaciones portátiles.
SQL
SQL
Administración de bases de datos
Lenguaje para gestionar bases de datos relacionales.
TailwindCSS
TailwindCSS
Frontend
Framework de utilidades CSS para diseños rápidos y personalizables.
Kotlin
Kotlin
Backend
Lenguaje de programación moderno y seguro para aplicaciones Android.
HTML
HTML
Frontend
Lenguaje de marcado para estructurar contenido web.
Numpy
Numpy
Ciencia de Datos e Inteligencia artificial
Biblioteca Python para computación científica y matrices.
Bash
Bash
Administración de sistemas
Intérprete de comandos para sistemas Unix y Linux.
Matplotlib
Matplotlib
Ciencia de Datos e Inteligencia artificial
Biblioteca Python para crear gráficos y visualizaciones.