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
- Modelli e AutoMigrate
- Operazioni CRUD
- Associazioni
- Hook e scope