Modèles et AutoMigrate
Définir et migrer le schéma
Modèles et AutoMigrate est une leçon Go Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Go Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Go Academy comprend 4 leçons au total.
Qu'est-ce que GORM
GORM est l'ORM le plus populaire pour Go. Il associe les structures Go aux tables de la base de données afin que vous travailliez avec des objets plutôt qu'avec du SQL brut. Il prend en charge PostgreSQL, MySQL, SQLite et bien d'autres systèmes.
- Association des structures aux tables
- Migrations automatiques
- Associations et points d'extension
Définir un modèle
Un modèle est une structure Go. Chaque champ exporté devient une colonne. L'intégration de gorm.Model ajoute les champs ID, CreatedAt, UpdatedAt et DeletedAt.
type User struct {
gorm.Model
Name string
Email string
Age int
}Balises de champs
Les balises de structure personnalisent les colonnes. Vous pouvez définir la taille, l'unicité, les index et les valeurs par défaut avec la balise gorm. Une balise s'écrit entre accents graves après le type du champ, par exemple 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
}Conventions de nommage
GORM met par défaut les noms au pluriel et utilise la casse snake_case : une structure User correspond à une table users, et le champ CreatedAt correspond à created_at. Vous pouvez remplacer ces conventions.
Ouvrir une base avec GORM
gorm.Open reçoit un adaptateur pour votre base de données et renvoie un *gorm.DB. Cette référence encapsule le pool de connexions.
db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{})
if err != nil {
log.Fatal(err)
}AutoMigrate
AutoMigrate crée les tables, les colonnes manquantes et les index nécessaires pour correspondre à vos structures. Cette opération est additive : elle ne supprime pas de colonnes et ne modifie pas les types de manière destructive.
db.AutoMigrate(&User{}, &Product{})Ce que AutoMigrate ne fait pas
AutoMigrate ne supprime jamais les colonnes inutilisées et ne réduit pas les types, afin d'éviter toute perte de données. Pour renommer ou supprimer des éléments, ou modifier des types, vous avez besoin d'outils de migration explicites.
Une simulation exécutable du mappage des modèles
GORM nécessite un pilote de base de données réel ; cet exemple exécutable simule le mappage des tables et des colonnes en casse snake_case effectué par 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))
}
}Le champ DeletedAt
Si votre modèle intègre gorm.Model ou possède un champ gorm.DeletedAt, GORM active les suppressions logiques. Les lignes supprimées reçoivent un horodatage et sont masquées dans les requêtes au lieu d'être supprimées.
Noms de tables personnalisés
Implémentez une méthode TableName sur le modèle pour remplacer le nom par défaut. Cela est utile lorsque votre schéma utilise des noms qui ne correspondent pas aux conventions de GORM.
func (User) TableName() string {
return "app_users"
}Remarque sur les paquets externes
GORM et ses adaptateurs se trouvent en dehors de la bibliothèque standard. Ils nécessitent go get gorm.io/gorm ainsi qu'un pilote tel que gorm.io/driver/postgres. Les extraits GORM présentés ici sont donnés à titre d'illustration.
Vérification rapide
Vérifiez vos connaissances sur les modèles.
Récapitulatif
Vous avez appris à utiliser les modèles et AutoMigrate :
- Les structures correspondent aux tables ; gorm.Model ajoute ID et les horodatages
- Les balises définissent les clés primaires, les index et les contraintes
- Le nommage par défaut utilise le pluriel et la casse snake_case
- AutoMigrate est additif et n'effectue jamais d'opération destructive
- DeletedAt active les suppressions logiques
Questions Fréquemment Posées
La leçon « Modèles et AutoMigrate » est-elle gratuite ?
Oui — le texte complet de « Modèles et AutoMigrate » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Go Academy, passe à CoddyKit PRO. Le cours Go Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Modèles et AutoMigrate » ?
Définir et migrer le schéma Tu pratiques Go Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Go Academy ?
Aucune expérience préalable n'est requise. Go Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.
Combien de temps prend la leçon « Modèles et AutoMigrate » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Go Academy ?
Oui. Chaque leçon Go Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Modèles et AutoMigrate
- Opérations CRUD
- Associations
- Hooks et portées