Trabajo con bases de datos en Go: PostgreSQL y MongoDB

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Introducción: Por qué Go y las bases de datos son una pareja ideal

Go (Golang) es un lenguaje compilado, tipado estáticamente, creado para alto rendimiento y simplicidad de desarrollo. Una de las ventajas clave de Go es su rica biblioteca estándar y ecosistema de drivers para trabajar con bases de datos. En este artículo, analizaremos cómo conectarse y realizar operaciones con los dos sistemas de gestión de bases de datos (SGBD) más populares: la relacional PostgreSQL y la orientada a documentos MongoDB.

Revisaremos la instalación de drivers, la escritura de operaciones CRUD (Create, Read, Update, Delete) y las mejores prácticas para cada tipo de BD en el contexto de aplicaciones Go.



1. Trabajando con PostgreSQL en Go

PostgreSQL es un potente SGBD objeto-relacional de código abierto. Para trabajar con él en Go existen varios drivers, pero los más populares son lib/pq y pgx. pgx es más moderno y eficiente, por lo que lo usaremos.



1.1. Instalación del driver

Instale el paquete pgx mediante go get:

go get github.com/jackc/pgx/v5


1.2. Conexión a la base de datos

Creemos un archivo main.go y establezcamos una conexión con PostgreSQL. Observe el uso del contexto (context.Background()) — este es un patrón estándar en Go para gestionar el tiempo de vida de las solicitudes.

package main

import ( "context" "fmt" "log"

"github.com/jackc/pgx/v5/pgxpool")

func main() { // Cadena de conexión: postgres://username:password@host:port/dbname connString := "postgres://user:password@localhost:5432/mydb" // Creamos un pool de conexiones (recomendado para producción) pool, err := pgxpool.New(context.Background(), connString) if err != nil { log.Fatal("No se pudo crear el pool de conexiones:", err) } defer pool.Close() // Verificamos la conexión err = pool.Ping(context.Background()) if err != nil { log.Fatal("No se pudo conectar a la BD:", err) } fmt.Println("¡Conectado exitosamente a PostgreSQL!")}


1.3. Ejecución de consultas SQL (CRUD)

Veamos las operaciones básicas con el ejemplo de la tabla users.



Creación de tabla (CREATE)

// Ejecución de consulta DDL_, err = pool.Exec(context.Background(), `    CREATE TABLE IF NOT EXISTS users (        id SERIAL PRIMARY KEY,        name VARCHAR(100) NOT NULL,        email VARCHAR(100) UNIQUE NOT NULL,        age INT    )`)if err != nil {    log.Fatal("Error al crear la tabla:", err)}


Inserción de datos (INSERT)

// Inserción con retorno de IDvar userID interr = pool.QueryRow(context.Background(),    "INSERT INTO users (name, email, age) VALUES ($1, $2, $3) RETURNING id",    "Alexei", "alex@example.com", 30).Scan(&userID)if err != nil {    log.Fatal("Error al insertar:", err)}fmt.Printf("Usuario agregado con ID: %d", userID)


Lectura de datos (SELECT)

// Obtener un usuariotype User struct {    ID    int    Name  string    Email string    Age   int}

var user Usererr = pool.QueryRow(context.Background(), "SELECT id, name, email, age FROM users WHERE id = $1", 1). Scan(&user.ID, &user.Name, &user.Email, &user.Age)if err != nil { log.Fatal("Usuario no encontrado:", err)}fmt.Printf("Encontrado: %+v", user)


Actualización y eliminación (UPDATE/DELETE)

// Actualización_, err = pool.Exec(context.Background(),    "UPDATE users SET age = $1 WHERE id = $2", 31, 1)

// Eliminación_, err = pool.Exec(context.Background(), "DELETE FROM users WHERE id = $1", 1)


2. Trabajando con MongoDB en Go

MongoDB es la base de datos NoSQL líder. Almacena

Blogs

Book Recommendations