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
- Apertura de una conexión
- Consulta de filas
- Sentencias preparadas
- Transacciones