GORM 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

¿Qué es GORM y para qué sirve?

\n\n

GORM es una potente y popular biblioteca ORM (Object-Relational Mapping) para el lenguaje Go. Proporciona a los desarrolladores una forma conveniente de interactuar con bases de datos relacionales (PostgreSQL, MySQL, SQLite, SQL Server, etc.) utilizando un enfoque orientado a objetos en Go.

\n\n

¿Para qué sirve GORM?

\n
    \n
  • Automatización CRUD: GORM se encarga de escribir el código SQL repetitivo para crear, leer, actualizar y eliminar registros.
  • \n
  • Migraciones de esquema: Permite crear y actualizar automáticamente tablas en la base de datos basándose en sus estructuras de Go.
  • \n
  • Relaciones entre tablas: Simplifica el trabajo con relaciones "uno a muchos", "muchos a muchos" y "uno a uno".
  • \n
  • Seguridad: Protección integrada contra inyecciones SQL mediante consultas parametrizadas.
  • \n
  • Rendimiento: Soporta carga diferida (Lazy Loading), precarga (Eager Loading) y almacenamiento en caché.
  • \n
  • Comunidad: Gran comunidad, numerosos plugins y extensiones.
  • \n
\n\n

Instalación de GORM

\n\n

GORM se instala de la forma estándar para paquetes Go. Asegúrese de tener Go instalado (versión 1.18+).

\n\n
go get -u gorm.io/gorm\ngo get -u gorm.io/driver/sqlite  # Para SQLite\ngo get -u gorm.io/driver/mysql   # Para MySQL\ngo get -u gorm.io/driver/postgres # Para PostgreSQL\ngo get -u gorm.io/driver/sqlserver # Para SQL Server
\n\n

Nota: A diferencia de Python (pip) o Node.js (npm), Go no tiene un administrador de paquetes único. El comando go get descarga el código fuente y lo compila en su proyecto.

\n\n

Inicio rápido con ejemplo de código

\n\n

Creemos una aplicación simple para gestionar usuarios usando SQLite.

\n\n
package main\n\nimport (\n    "fmt"\n    "gorm.io/driver/sqlite"\n    "gorm.io/gorm"\n)\n\n// User — modelo de datos, correspondiente a la tabla en la BD\ntype User struct {\n    ID    uint   `gorm:"primaryKey"`\n    Name  string `gorm:"size:100;not null"`\n    Email string `gorm:"uniqueIndex;size:255"`\n    Age   int\n}\n\nfunc main() {\n    // 1. Conexión a la base de datos\n    db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})\n    if err != nil {\n        panic("failed to connect database")\n    }\n\n    // 2. Automigración — creación de la tabla\n    db.AutoMigrate(&User{})\n\n    // 3. Creación de registro (Create)\n    user := User{Name: "Iván Petrov", Email: "ivan@example.com", Age: 30}\n    result := db.Create(&user)\n    if result.Error != nil {\n        fmt.Println("Error de creación:", result.Error)\n    }\n    fmt.Printf("Usuario creado con ID: %d\\n", user.ID)\n\n    // 4. Lectura de registro (Read)\n    var readUser User\n    db.First(&readUser, user.ID) // Búsqueda por clave primaria\n    fmt.Printf("Usuario encontrado: %+v\\n", readUser)\n\n    // 5. Actualización de registro (Update)\n    db.Model(&readUser).Update("Age", 31)\n    fmt.Printf("Edad actualizada: %d\\n", readUser.Age)\n\n    // 6. Eliminación de registro (Delete)\n    db.Delete(&readUser)\n    fmt.Println("Usuario eliminado")\n}
\n\n

Métodos/funciones principales de GORM

\n\n

1. gorm.Open(dialector, config)

\n

Qué hace: Establece una conexión con la base de datos. Devuelve una instancia de *gorm.DB.

\n

Parámetros:

\n
    \n
  • dialector — controlador de base de datos (por ejemplo, sqlite.Open, mysql.Open, postgres.Open).
  • \n
  • config — configuración de GORM (gorm.Config).
  • \n
\n

Ejemplo:

\n
db, err := gorm.Open(mysql.Open("user:password@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"), &gorm.Config{})
\n\n

2. db.AutoMigrate(models ...interface{})

\n

Qué hace: Crea o actualiza automáticamente la t

Recommendations