0Pricing
Go Academy · Lección

database/sql y drivers

Configuración de la base de datos, QueryRow, Scan y pools de conexiones

database/sql y drivers es una lección gratuita de Go Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Go Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Go Academy incluye 4 lecciones en total.

Descripción general de database/sql

database/sql es la capa estándar de abstracción de bases de datos de Go. Gestiona un conjunto de conexiones y funciona con cualquier base de datos mediante un plugin de controlador.

Registro de un controlador

Importe el paquete del controlador por sus efectos secundarios (registro del controlador). Después, abra una conexión:

import _ "github.com/lib/pq" // PostgreSQL driver

db, err := sql.Open("postgres", "postgres://user:pass@localhost/mydb?sslmode=disable")
if err != nil { log.Fatal(err) }
defer db.Close()

sql.Open frente a db.Ping

sql.Open no se conecta; valida el DSN. Llame a db.Ping() o db.PingContext(ctx) para verificar que la conexión sigue activa.

if err := db.Ping(); err != nil { log.Fatal(err) }

Consulta de filas

Utilice db.QueryContext para ejecutar un SELECT y recorrer las filas:

rows, err := db.QueryContext(ctx, "SELECT id, name FROM users WHERE active = $1", true)
if err != nil { return err }
defer rows.Close()
for rows.Next() {
    var id int; var name string
    rows.Scan(&id, &name)
}

Consulta de una sola fila

db.QueryRowContext devuelve un *Row para consultas que se espera que devuelvan como máximo un resultado:

var name string
err := db.QueryRowContext(ctx, "SELECT name FROM users WHERE id = $1", id).Scan(&name)
if errors.Is(err, sql.ErrNoRows) { /* not found */ }

Ejecución de mutaciones

Utilice db.ExecContext para INSERT, UPDATE y DELETE. Devuelve un Result con el número de filas afectadas y el último ID insertado.

result, err := db.ExecContext(ctx, "INSERT INTO users(name) VALUES($1)", name)
if err != nil { return err }
id, _ := result.LastInsertId()

Sentencias preparadas

Prepare una sentencia una vez y ejecútela muchas veces de forma eficiente:

stmt, err := db.PrepareContext(ctx, "SELECT id FROM users WHERE email = $1")
defer stmt.Close()
for _, email := range emails {
    row := stmt.QueryRowContext(ctx, email)
}

Configuración del conjunto de conexiones

Configure el conjunto para producción:

db.SetMaxOpenConns(25)
db.SetMaxIdleConns(25)
db.SetConnMaxLifetime(5 * time.Minute)

Comprobación de rows.Err()

Después del bucle de filas, compruebe siempre rows.Err(): el bucle podría haber terminado antes de tiempo debido a un error de red.

if err := rows.Err(); err != nil { return err }

Valores nulos

Utilice sql.NullString, sql.NullInt64, etc. para gestionar valores NULL de la base de datos que, de lo contrario, provocarían un panic al escanearlos en un tipo de Go que no sea un puntero.

var bio sql.NullString
rows.Scan(&bio)
if bio.Valid { fmt.Println(bio.String) }

Lista de controladores

Controladores populares: github.com/lib/pq (PostgreSQL), github.com/go-sql-driver/mysql (MySQL), modernc.org/sqlite (SQLite, Go puro).

Comprobación rápida

¿Por qué debe llamar siempre a rows.Close() y comprobar rows.Err() después de una consulta?

Recapitulación: database/sql

Puntos clave:

  • Importe el controlador con _ para ejecutar sus efectos secundarios; sql.Open + Ping
  • QueryContext → rows.Next + Scan + rows.Close + rows.Err
  • ExecContext para mutaciones; QueryRowContext para filas individuales
  • SetMaxOpenConns, SetMaxIdleConns y SetConnMaxLifetime para el conjunto de conexiones

Preguntas frecuentes

¿La lección «database/sql y drivers» es gratis?

Sí — el texto completo de «database/sql y drivers» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Go Academy, actualiza a CoddyKit PRO. El curso de Go Academy incluye 4 lecciones en total.

¿Qué aprenderé en «database/sql y drivers»?

Configuración de la base de datos, QueryRow, Scan y pools de conexiones Practicas Go Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Go Academy?

No se requiere experiencia previa. Go Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.

¿Cuánto tiempo toma la lección «database/sql y drivers»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Go Academy?

Sí. Cada lección de Go Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. database/sql y drivers
  2. sqlx: escaneo de structs y consultas con nombre
  3. pgx: driver de PostgreSQL de alto rendimiento
  4. Transacciones y migraciones
← Volver a Go Academy