0Pricing
Go Academy · Lección

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

  1. Modelos y AutoMigrate
  2. Operaciones CRUD
  3. Asociaciones
  4. Hooks y scopes
← Volver a Go Academy