0Pricing
Go Academy · Lección

Apertura de una conexión

Conéctese a una base de datos

Apertura de una conexión 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.

El paquete database/sql

El paquete estándar de Go, database/sql, proporciona una API genérica e independiente de la base de datos. Se combina con un driver para la base de datos específica, como PostgreSQL o MySQL.

  • Una API para muchas bases de datos
  • Pool de conexiones integrado
  • Consultas parametrizadas seguras

Importar un driver

El driver se registra mediante una importación en blanco. El guion bajo significa que se importa únicamente por su efecto secundario, el registro, y no para llamarlo directamente.

import (
    "database/sql"
    _ "github.com/lib/pq"
)

sql.Open

sql.Open recibe un nombre de driver y un nombre de origen de datos (DSN). Todavía no establece una conexión; solo prepara el pool.

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

db es un pool

El *sql.DB devuelto no es una única conexión, sino un pool de conexiones que pueden usar simultáneamente muchas gorutinas de forma segura. Ábralo una vez y compártalo en toda la aplicación.

Verificar con Ping

Como Open establece la conexión de forma diferida, use Ping para establecerla realmente y confirmar que la base de datos es accesible y que las credenciales son válidas.

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

Cerrar el pool

Use db.Close() en un defer dentro de la función principal o de configuración. Rara vez se cierra por consulta; normalmente solo cuando se apaga toda la aplicación.

defer db.Close()

Ajustar el pool

Controle el pool con SetMaxOpenConns, SetMaxIdleConns y SetConnMaxLifetime. Estas opciones evitan agotar la base de datos y reciclan las conexiones obsoletas.

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

Ejemplo ejecutable en memoria

Los drivers reales necesitan una base de datos de red, por lo que este ejemplo ejecutable muestra el mismo ciclo de vida con una apertura y un ping simulados, usando únicamente tipos de la biblioteca estándar.

package main

import (
    "errors"
    "fmt"
)

type DB struct{ dsn string }

func Open(driver, dsn string) (*DB, error) {
    if dsn == "" {
        return nil, errors.New("empty dsn")
    }
    return &DB{dsn: dsn}, nil
}

func (db *DB) Ping() error { return nil }
func (db *DB) Close() error { return nil }

func main() {
    db, err := Open("postgres", "postgres://localhost/mydb")
    if err != nil {
        fmt.Println("open error:", err)
        return
    }
    defer db.Close()
    if err := db.Ping(); err != nil {
        fmt.Println("ping error:", err)
        return
    }
    fmt.Println("connected to", db.dsn)
}

Variantes que admiten contextos

Prefiera PingContext, QueryContext y ExecContext para que las llamadas respeten los plazos y la cancelación. Pasar un contexto limita cuánto tiempo puede bloquear una llamada a una base de datos que no responde.

ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second)
defer cancel()
err := db.PingContext(ctx)

El formato del DSN

Cada driver define su propio DSN. PostgreSQL acepta una URL; MySQL usa user:pass@tcp(host:3306)/dbname. Consulte siempre la documentación de los drivers y evite incluir credenciales directamente en el código.

Un único pool de larga duración

Un error habitual es llamar a sql.Open en cada solicitud. Esto anula el pooling y agota las conexiones. Ábralo una vez al iniciar la aplicación, almacene el *sql.DB y reutilícelo en todas partes.

Comprobación rápida

Compruebe sus conocimientos sobre conexiones.

Repaso

Ha aprendido a abrir una conexión:

  • Importe un driver en blanco y llame a sql.Open con el driver y el DSN
  • *sql.DB es un pool seguro para la concurrencia que se abre una sola vez
  • Ping verifica la conectividad real
  • Ajuste el pool y use métodos compatibles con contextos
  • Use defer db.Close() al apagar la aplicación

Preguntas frecuentes

¿La lección «Apertura de una conexión» es gratis?

Sí — el texto completo de «Apertura de una conexión» 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 «Apertura de una conexión»?

Conéctese a una base de datos 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 «Apertura de una conexión»?

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. Apertura de una conexión
  2. Consulta de filas
  3. Sentencias preparadas
  4. Transacciones
← Volver a Go Academy