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.
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.
Tipo de tecnología
Lenguaje
Categoría laboral
Backend
Año de lanzamiento
2009
Developers
Todos los módulos del curso 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
C
C
Backend
Lenguaje de propósito general, eficiente y de bajo nivel.
Rust
Rust
Backend
Lenguaje de programación de sistemas enfocado en seguridad, concurrencia y rendimiento.
R
R
Ciencia de Datos e IA
Lenguaje para análisis estadístico, manipulación de datos y visualización gráfica.
TypeScript
TypeScript
Full Stack
Superconjunto de JavaScript con tipado estático.
Hibernate
Hibernate
Backend
ORM para Java, simplifica el acceso a bases de datos.
PySpark
PySpark
Big Data
Motor unificado de análisis de datos distribuido para grandes volúmenes.