GORM pour Go : guide complet avec exemples

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Qu'est-ce que GORM et pourquoi en a-t-on besoin ?

\n\n

GORM est une bibliothèque ORM (Object-Relational Mapping) puissante et populaire pour le langage Go. Elle offre aux développeurs un moyen pratique d'interagir avec les bases de données relationnelles (PostgreSQL, MySQL, SQLite, SQL Server, etc.) en utilisant une approche orientée objet en Go.

\n\n

Pourquoi GORM est-il nécessaire ?

\n
    \n
  • Automatisation des CRUD : GORM prend en charge l'écriture de code SQL standard pour la création, la lecture, la mise à jour et la suppression d'enregistrements.
  • \n
  • Migrations de schéma : Permet de créer et de mettre à jour automatiquement les tables de la base de données à partir de vos structures Go.
  • \n
  • Relations entre tables : Simplifie le travail avec les relations "un à plusieurs", "plusieurs à plusieurs" et "un à un".
  • \n
  • Sécurité : Protection intégrée contre les injections SQL via des requêtes paramétrées.
  • \n
  • Performances : Prend en charge le chargement paresseux (Lazy Loading), le préchargement (Eager Loading) et la mise en cache.
  • \n
  • Communauté : Une immense communauté, de nombreux plugins et extensions.
  • \n
\n\n

Installation de GORM

\n\n

GORM s'installe de manière standard pour les paquets Go. Assurez-vous d'avoir Go installé (version 1.18+).

\n\n
go get -u gorm.io/gorm\ngo get -u gorm.io/driver/sqlite  # Pour SQLite\ngo get -u gorm.io/driver/mysql   # Pour MySQL\ngo get -u gorm.io/driver/postgres # Pour PostgreSQL\ngo get -u gorm.io/driver/sqlserver # Pour SQL Server
\n\n

Remarque : Contrairement à Python (pip) ou Node.js (npm), Go n'a pas de gestionnaire de paquets unique. La commande go get télécharge le code source et le compile dans votre projet.

\n\n

Démarrage rapide avec un exemple de code

\n\n

Créons une application simple pour gérer des utilisateurs en utilisant SQLite.

\n\n
package main\n\nimport (\n    "fmt"\n    "gorm.io/driver/sqlite"\n    "gorm.io/gorm"\n)\n\n// User — modèle de données correspondant à la table dans la base de données\ntype User struct {\n    ID    uint   `gorm:"primaryKey"`\n    Name  string `gorm:"size:100;not null"`\n    Email string `gorm:"uniqueIndex;size:255"`\n    Age   int\n}\n\nfunc main() {\n    // 1. Connexion à la base de données\n    db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})\n    if err != nil {\n        panic("échec de la connexion à la base de données")\n    }\n\n    // 2. Automigration — création de la table\n    db.AutoMigrate(&User{})\n\n    // 3. Création d'un enregistrement (Create)\n    user := User{Name: "Ivan Petrov", Email: "ivan@example.com", Age: 30}\n    result := db.Create(&user)\n    if result.Error != nil {\n        fmt.Println("Erreur de création :", result.Error)\n    }\n    fmt.Printf("Utilisateur créé avec l'ID : %d\\n", user.ID)\n\n    // 4. Lecture d'un enregistrement (Read)\n    var readUser User\n    db.First(&readUser, user.ID) // Recherche par clé primaire\n    fmt.Printf("Utilisateur trouvé : %+v\\n", readUser)\n\n    // 5. Mise à jour d'un enregistrement (Update)\n    db.Model(&readUser).Update("Age", 31)\n    fmt.Printf("Âge mis à jour : %d\\n", readUser.Age)\n\n    // 6. Suppression d'un enregistrement (Delete)\n    db.Delete(&readUser)\n    fmt.Println("Utilisateur supprimé")\n}
\n\n

Méthodes/fonctions principales de GORM

\n\n

1. gorm.Open(dialector, config)

\n

Ce qu'elle fait : Établit une connexion à la base de données. Retourne une instance de *gorm.DB.

\n

Paramètres :

\n
    \n
  • dialector — pilote de base de données (par exemple, sqlite.Open, mysql.Open, postgres.Open).
  • \n
  • config — configuration GORM (gorm.Config).
  • \n
\n

Exemple :

\n
db, err := gorm.Open(mysql.Open("user:password@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"), &gorm.Config{})
\n\n

2. db.AutoMigrate(models ...interface{})

\n

Ce qu'elle fait : Crée ou met à jour automatiquement la t

Recommendations