Modelos y AutoMigrate
Defina y migre el esquema
Modelos y AutoMigrate 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.
Qué es GORM
GORM es el ORM más popular para Go. Asigna las estructuras de Go a tablas de base de datos, de modo que se trabaja con objetos en lugar de SQL sin procesar. Es compatible con PostgreSQL, MySQL, SQLite y otros sistemas.
- Asignación de estructuras a tablas
- Migraciones automáticas
- Asociaciones y hooks
Definición de un modelo
Un modelo es una estructura de Go. Cada campo exportado se convierte en una columna. Incluir gorm.Model añade los campos ID, CreatedAt, UpdatedAt y DeletedAt.
type User struct {
gorm.Model
Name string
Email string
Age int
}Etiquetas de campos
Las etiquetas de las estructuras permiten personalizar las columnas. Puede establecer el tamaño, la unicidad, los índices y los valores predeterminados con la etiqueta gorm. Una etiqueta se escribe entre comillas invertidas después del tipo del campo; por ejemplo, gorm:"uniqueIndex;size:255".
type User struct {
// ID uint tag: gorm:"primaryKey"
// Email string tag: gorm:"uniqueIndex;size:255"
// Name string tag: gorm:"not null"
ID uint
Email string
Name string
}Convenciones de nombres
De forma predeterminada, GORM convierte los nombres al plural y utiliza snake_case: una estructura User se asigna a una tabla users, y el campo CreatedAt se asigna a created_at. Puede modificar estas convenciones.
Apertura con GORM
gorm.Open recibe un dialector para su base de datos y devuelve un *gorm.DB. Este objeto encapsula el pool de conexiones.
db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{})
if err != nil {
log.Fatal(err)
}AutoMigrate
AutoMigrate crea tablas, columnas que faltan e índices para que coincidan con sus estructuras. Es aditivo: no elimina columnas ni modifica tipos de forma destructiva.
db.AutoMigrate(&User{}, &Product{})Lo que AutoMigrate no hace
AutoMigrate nunca elimina columnas sin uso ni reduce el tamaño de los tipos para evitar la pérdida de datos. Para cambiar nombres, eliminar elementos o modificar tipos, necesita herramientas de migración explícitas.
Una simulación ejecutable de asignación de modelos
GORM necesita un controlador de base de datos real, por lo que este ejemplo ejecutable simula la asignación de tablas y columnas en snake_case que realiza AutoMigrate.
package main
import (
"fmt"
"strings"
)
func toSnake(s string) string {
var b strings.Builder
for i, r := range s {
if i > 0 && r >= 65 && r <= 90 {
b.WriteByte(95)
}
if r >= 65 && r <= 90 {
r = r + 32
}
b.WriteRune(r)
}
return b.String()
}
func main() {
model := "User"
fields := []string{"ID", "Name", "CreatedAt"}
fmt.Println("table:", toSnake(model)+"s")
for _, f := range fields {
fmt.Println("column:", toSnake(f))
}
}El campo DeletedAt
Si su modelo incluye gorm.Model o tiene un campo gorm.DeletedAt, GORM habilita las eliminaciones lógicas. Las filas eliminadas reciben una marca de tiempo y se ocultan de las consultas en lugar de eliminarse.
Nombres de tablas personalizados
Implemente un método TableName en el modelo para modificar el valor predeterminado. Esto resulta útil cuando el esquema utiliza nombres que no coinciden con las convenciones de GORM.
func (User) TableName() string {
return "app_users"
}Nota sobre paquetes externos
GORM y sus dialectos se encuentran fuera de la biblioteca estándar, por lo que requieren go get gorm.io/gorm y un controlador como gorm.io/driver/postgres. Los fragmentos de GORM que aparecen aquí son ilustrativos.
Comprobación rápida
Ponga a prueba sus conocimientos sobre modelos.
Resumen
Ha aprendido sobre los modelos y AutoMigrate:
- Las estructuras se asignan a tablas; gorm.Model añade ID y marcas de tiempo
- Las etiquetas establecen claves principales, índices y restricciones
- Los nombres predeterminados usan el plural y snake_case
- AutoMigrate es aditivo y nunca destructivo
- DeletedAt habilita las eliminaciones lógicas
Preguntas frecuentes
¿La lección «Modelos y AutoMigrate» es gratis?
Sí — el texto completo de «Modelos y AutoMigrate» 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 «Modelos y AutoMigrate»?
Defina y migre el esquema 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 «Modelos y AutoMigrate»?
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
- Modelos y AutoMigrate
- Operaciones CRUD
- Asociaciones
- Hooks y scopes