0Pricing
Go Academy · Lezione

Modelli e AutoMigrate

Definire e migrare lo schema

Modelli e AutoMigrate è una lezione Go Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Go Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Go Academy include 4 lezioni in totale.

Che cos'è GORM

GORM è l'ORM più utilizzato per Go. Mappa le struct Go sulle tabelle del database, consentendo di lavorare con oggetti invece che con SQL grezzo. Supporta PostgreSQL, MySQL, SQLite e altri database.

  • Mappatura da struct a tabella
  • Migrazioni automatiche
  • Associazioni e hook

Definizione di un model

Un model è una struct Go. Ogni campo esportato diventa una colonna. L'embedding di gorm.Model aggiunge i campi ID, CreatedAt, UpdatedAt e DeletedAt.

type User struct {
    gorm.Model
    Name  string
    Email string
    Age   int
}

Tag dei campi

I tag delle struct personalizzano le colonne. Con il tag gorm può impostare dimensioni, unicità, indici e valori predefiniti. Un tag viene scritto tra backtick dopo il tipo del campo, per esempio 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
}

Convenzioni per i nomi

Per impostazione predefinita, GORM pluralizza i nomi e usa lo snake_case: una struct User viene mappata sulla tabella users e il campo CreatedAt sulla colonna created_at. Può modificare queste impostazioni.

Apertura con GORM

gorm.Open accetta un dialector per il database e restituisce un *gorm.DB. Questo handle avvolge il pool di connessioni.

db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{})
if err != nil {
    log.Fatal(err)
}

AutoMigrate

AutoMigrate crea tabelle, colonne mancanti e indici in modo che corrispondano alle Sue struct. È un'operazione aggiuntiva: non elimina colonne e non modifica i tipi in modo distruttivo.

db.AutoMigrate(&User{}, &Product{})

Che cosa non fa AutoMigrate

AutoMigrate non elimina mai le colonne inutilizzate né riduce le dimensioni dei tipi, per evitare la perdita di dati. Per rinominare o eliminare elementi, oppure modificare i tipi, sono necessari strumenti di migrazione espliciti.

Una simulazione eseguibile della mappatura dei model

GORM richiede un driver per un database reale, quindi questo esempio eseguibile simula la mappatura di tabelle e colonne in snake_case eseguita da 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))
    }
}

Il campo DeletedAt

Se il model incorpora gorm.Model o contiene un campo gorm.DeletedAt, GORM abilita le soft delete. Alle righe eliminate viene assegnato un timestamp e vengono nascoste dalle query invece di essere rimosse.

Nomi personalizzati delle tabelle

Implementi un metodo TableName sul model per sostituire il comportamento predefinito. È utile quando lo schema usa nomi che non seguono le convenzioni di GORM.

func (User) TableName() string {
    return "app_users"
}

Nota sui pacchetti esterni

GORM e i suoi dialector non fanno parte della libreria standard e richiedono go get gorm.io/gorm e un driver come gorm.io/driver/postgres. Gli snippet GORM qui riportati sono a scopo illustrativo.

Verifica rapida

Verifichi le Sue conoscenze sui model.

Riepilogo

Ha imparato a usare i model e AutoMigrate:

  • Le struct vengono mappate sulle tabelle; gorm.Model aggiunge ID e timestamp
  • I tag impostano chiavi primarie, indici e vincoli
  • La denominazione predefinita usa il plurale e lo snake_case
  • AutoMigrate è un'operazione aggiuntiva e mai distruttiva
  • DeletedAt abilita le soft delete

Domande Frequenti

La lezione «Modelli e AutoMigrate» è gratuita?

Sì — il testo completo di «Modelli e AutoMigrate» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Go Academy, passa a CoddyKit PRO. Il corso Go Academy include 4 lezioni in totale.

Cosa imparerò in «Modelli e AutoMigrate»?

Definire e migrare lo schema Eserciti Go Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Go Academy?

Non è richiesta alcuna esperienza precedente. Go Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.

Quanto tempo richiede la lezione «Modelli e AutoMigrate»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Go Academy?

Sì. Ogni lezione Go Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Modelli e AutoMigrate
  2. Operazioni CRUD
  3. Associazioni
  4. Hook e scope
← Torna a Go Academy