JPO : Webinar d'information sur nos formations → RDV mardi à 17h30.

Backend Go: rendimiento y simplicidad en el centro del desarrollo web

Go (o Golang) es un lenguaje creado por Google que se ha convertido en una excelente opción para los desarrolladores backend. De hecho, Go tiene una gran capacidad para gestionar sistemas complejos y una alta eficiencia en términos de productividad.

¿Cómo se gestiona la concurrencia?

El desarrollo backend a menudo implica gestionar múltiples conexiones y procesos simultáneamente. Go ofrece un excepcional soporte para la concurrencia gracias a su sistema de goroutines y canales. Las goroutines permiten crear hilos livianos con una sintaxis simple, lo cual es perfecto para construir aplicaciones backend que deben responder a miles de solicitudes simultáneamente. Esto facilita la creación de aplicaciones backend escalables sin la complejidad asociada con la programación multithread en otros lenguajes.

Con el soporte para la concurrencia que ofrece Go, es más fácil gestionar la carga a gran escala sin comprometer el rendimiento. Esta capacidad es valiosa en el desarrollo de aplicaciones backend modernas, que deben manejar millones de solicitudes mientras ofrecen tiempos de respuesta muy cortos.

Las Goroutines son funciones que pueden ejecutarse de manera concurrente (o en paralelo), pero con una gestión más ligera que los hilos tradicion

¿En qué consiste el tipado estático?

Go es un lenguaje llamado statically typed, o tipado estáticamente, lo que significa que los errores de tipo se detectan durante la compilación en lugar de en la ejecución. Esto asegura una mejor estabilidad del código y permite a los desarrolladores evitar errores comunes que podrían aparecer más tarde en el ciclo de desarrollo. Esta característica hace que Go sea particularmente adecuado para el desarrollo backend.

El tipado estático ayuda a mejorar el mantenimiento y la legibilidad del código. Además, Go tiene un sistema de compilación rápida que permite a los desarrolladores ver rápidamente el resultado de sus modificaciones sin los largos tiempos de espera a menudo asociados con otros lenguajes de programación estáticos.

¿Qué ofrece la biblioteca estándar?

La biblioteca estándar de Go incluye muchas herramientas esenciales para el desarrollo web, incluyendo el paquete net http, que permite construir servidores HTTP con gran facilidad. Así, sin dependencias externas complejas, un desarrollador puede crear rápidamente una API RESTful u otros servicios backend.

Las herramientas proporcionadas por esta biblioteca estándar también están adaptadas a las necesidades modernas, con un foco en el rendimiento y la simplicidad. Por ejemplo, el soporte nativo para el parsing de JSON es muy práctico para los servicios web modernos que a menudo deben comunicarse con clientes y aplicaciones de terceros.

¿En qué consisten las pruebas unitarias integradas?

Go incluye un soporte de testing integrado que permite a los desarrolladores crear fácilmente pruebas unitarias. A menudo ignoradas, pero igualmente importantes, garantizan la calidad y fiabilidad del código, especialmente en entornos críticos, donde cada componente debe funcionar sin fallos ni interrupciones. Estas pruebas son importantes para detectar problemas potenciales y asegurarse de que durante las actualizaciones no haya degradaciones en el servicio.

El hecho de que Go ofrezca esta capacidad de manera nativa simplifica enormemente la vida de los desarrolladores. No es necesario buscar frameworks de terceros para hacer pruebas básicas, lo que fomenta una buena higiene del código desde el inicio del proyecto.

¿Cómo se gestiona la memoria?

La gestión de la memoria de Go es particularmente eficaz. Utiliza un componente llamado garbage collector, o recolector de basura, que asegura que la memoria se libera cuando ya no se utiliza, minimizando las pausas y optimizando la eficiencia.

El garbage collector (abreviado como GC) funciona identificando los objetos que ya no son utilizados por el programa y liberando automáticamente la memoria que ocupan. El GC permite, por lo tanto, reducir las fugas de memoria y asegurar que la aplicación funcione continuamente sin degradar su rendimiento.

Ejemplo: desarrollo de un servidor Go y una API REST

Para entender concretamente la simplicidad y el poder de Go para el desarrollo backend, vamos a desarrollar un servidor web muy simple y una API REST básica.

1. Comenzamos inicializando el proyecto y el módulo Go:

				
					mkdir dst_go_project
cd dst_go_project
go mod init dst_go_project
				
			

Esto creará el archivo go.mod, permitiendo gestionar las dependencias del proyecto.

2. Crear ahora el archivo main.go que contendrá el código del servidor HTTP:

				
					package main

import (
    "fmt"
    "net/http"
)

// Handles requests to the root URL ("/")
func homeHandler(w http.ResponseWriter, r *http.Request) {
    // Send a simple welcome message as a response
    fmt.Fprintf(w, "Welcome here!")
}

func main() {
    // Register the handler for the root URL
    http.HandleFunc("/", homeHandler)
    fmt.Println("Server started on port 8080...")
    // Start the server on port 8080
    http.ListenAndServe(":8080", nil)
}

				
			

Este código define un servidor HTTP simple que escucha en el puerto 8080. La función homeHandler se llama para manejar las solicitudes a la raíz, devolviendo una respuesta básica.

3. Crear una API REST básica:

Agreguemos una ruta para una API REST, modificando el archivo main.go como sigue:

				
					package main

import (
    "encoding/json"
    "fmt"
    "net/http"
)

type Message struct {
    Content string `json:"content"`
}

// Handles requests to the "/api" URL
func apiHandler(w http.ResponseWriter, r *http.Request) {
    // Create a message to send as JSON
    message := Message{Content: "Hello, this is our Go API!"}
    w.Header().Set("Content-Type", "application/json")
    json.NewEncoder(w).Encode(message)
}

func main() {
    http.HandleFunc("/", homeHandler)
    http.HandleFunc("/api", apiHandler)
    fmt.Println("Server started on port 8080...")
    http.ListenAndServe(":8080", nil)
}

				
			

El servidor ahora tiene una ruta /api que devuelve un mensaje en JSON.

4. Iniciar el servidor:

El siguiente comando permite iniciar el servidor, que estará disponible en la dirección http://localhost:8080/, y la API en http://localhost:8080/api:

				
					go run main.go
				
			

¿Para concluir?

Go es un lenguaje de programación que se distingue por su capacidad para responder eficazmente a las necesidades del desarrollo backend moderno. Con su soporte para la concurrencia mediante goroutines, su tipado estático y su rica biblioteca estándar que ofrece muchas herramientas integradas, Go es un activo importante para construir aplicaciones robustas y escalables. El soporte de pruebas integradas también facilita el mantenimiento de la calidad del código, lo cual es importante para proyectos de gran envergadura.

¿No está disponible?

Déjenos su dirección de correo electrónico para que podamos enviarle los nuevos artículos cuando se publiquen.