¿Qué es GORM y para qué sirve?
\n\nGORM 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
Instalación de GORM
\n\nGORM se instala de la forma estándar para paquetes Go. Asegúrese de tener Go instalado (versión 1.18+).
\n\ngo 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\nNota: 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.
Inicio rápido con ejemplo de código
\n\nCreemos una aplicación simple para gestionar usuarios usando SQLite.
\n\npackage 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\nMétodos/funciones principales de GORM
\n\n1. gorm.Open(dialector, config)
\nQué hace: Establece una conexión con la base de datos. Devuelve una instancia de *gorm.DB.
\nPará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
Ejemplo:
\ndb, err := gorm.Open(mysql.Open("user:password@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"), &gorm.Config{})\n\n2. db.AutoMigrate(models ...interface{})
\nQué hace: Crea o actualiza automáticamente la t