sqlx para Go: guía completa con ejemplos

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 a sqlx: potente extensión de database/sql para Go

\n\n

La biblioteca sqlx es una extensión popular del paquete estándar database/sql en el lenguaje Go. No reemplaza el controlador estándar, sino que se construye sobre él, añadiendo funciones convenientes para trabajar con bases de datos. Si alguna vez ha escrito en Go y se ha enfrentado a la necesidad de escanear manualmente las filas de resultados de una consulta en estructuras, sqlx le parecerá un verdadero salvavidas.

\n\n

El objetivo principal de sqlx es simplificar y acelerar el desarrollo, eliminando el código repetitivo del desarrollador. La biblioteca permite:

\n
    \n
  • Mapear automáticamente los resultados de consultas SQL en estructuras de Go.
  • \n
  • Trabajar con parámetros nombrados en las consultas.
  • \n
  • Realizar inserciones masivas de datos (batch insert).
  • \n
  • Usar métodos convenientes para trabajar con prepared statements.
  • \n
  • Integrarse con cualquier controlador compatible con database/sql (PostgreSQL, MySQL, SQLite, etc.).
  • \n
\n\n

En el sitio PythonLib.ru a menudo hablamos sobre herramientas útiles para desarrolladores. Hoy analizaremos en detalle sqlx, una biblioteca que es imprescindible para todo desarrollador Go que trabaje con bases de datos.

\n\n

Instalación de sqlx

\n\n

La instalación de sqlx en un proyecto Go se realiza de forma estándar a través del gestor de paquetes go get:

\n\n
go get github.com/jmoiron/sqlx
\n\n

También necesitará instalar el controlador para la base de datos específica. Por ejemplo, para PostgreSQL:

\n\n
go get github.com/lib/pq
\n\n

Para MySQL:

\n\n
go get github.com/go-sql-driver/mysql
\n\n

Para SQLite:

\n\n
go get github.com/mattn/go-sqlite3
\n\n

Después de la instalación, puede importar la biblioteca en su código:

\n\n
import (\n    "github.com/jmoiron/sqlx"\n    _ "github.com/lib/pq" // controlador PostgreSQL\n)
\n\n

Inicio rápido: primer ejemplo con sqlx

\n\n

Escribamos un programa simple que se conecte a una base de datos PostgreSQL, cree una tabla, inserte varios registros y los muestre en pantalla.

\n\n
package main\n\nimport (\n    "fmt"\n    "log"\n    "github.com/jmoiron/sqlx"\n    _ "github.com/lib/pq"\n)\n\ntype User struct {\n    ID   int    `db:"id"`\n    Name string `db:"name"`\n    Age  int    `db:"age"`\n}\n\nfunc main() {\n    // Conexión a la base de datos\n    db, err := sqlx.Connect("postgres", "user=postgres dbname=testdb sslmode=disable")\n    if err != nil {\n        log.Fatalln(err)\n    }\n    defer db.Close()\n\n    // Creación de la tabla\n    schema := `CREATE TABLE IF NOT EXISTS users (\n        id SERIAL PRIMARY KEY,\n        name VARCHAR(100) NOT NULL,\n        age INTEGER NOT NULL\n    );`\n    db.MustExec(schema)\n\n    // Inserción de datos\n    db.MustExec("INSERT INTO users (name, age) VALUES ($1, $2)", "Alice", 30)\n    db.MustExec("INSERT INTO users (name, age) VALUES ($1, $2)", "Bob", 25)\n\n    // Consulta de datos\n    var users []User\n    err = db.Select(&users, "SELECT id, name, age FROM users")\n    if err != nil {\n        log.Fatalln(err)\n    }\n\n    fmt.Printf("Users: %+v\\n", users)\n}
\n\n

En este ejemplo, vemos las capacidades clave de sqlx: mapeo automático de campos de estructura (gracias a las etiquetas db), el método Select para consultar múltiples filas y MustExec para ejecutar consultas sin manejo de errores (útil para prototipado).

\n\n

Métodos y funciones principales de sqlx

\n\n

Veamos 10 métodos clave de la biblioteca sqlx con descripción detallada y ejemplos.

\n\n

1. sqlx.Connect

\n

Qué hace: Establece una conexión con la base de datos y la verifica (realiza un ping). Es la forma más conveniente de conectarse.

\n

Parámetros:

\n
    \n
  • driverName (string) — nombre del controlador (por ejemplo, "postgre

Recommendations