GORM für Go: Vollständiger Leitfaden mit Beispielen

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Was ist GORM und wozu wird es benötigt?

\n\n

GORM ist eine leistungsstarke und beliebte ORM-Bibliothek (Object-Relational Mapping) für die Programmiersprache Go. Sie bietet Entwicklern eine bequeme Möglichkeit, mit relationalen Datenbanken (PostgreSQL, MySQL, SQLite, SQL Server u.a.) zu interagieren, indem sie einen objektorientierten Ansatz in Go verwendet.

\n\n

Wozu wird GORM benötigt?

\n
    \n
  • Automatisierung von CRUD: GORM übernimmt das Schreiben von standardmäßigem SQL-Code zum Erstellen, Lesen, Aktualisieren und Löschen von Datensätzen.
  • \n
  • Schema-Migrationen: Ermöglicht das automatische Erstellen und Aktualisieren von Tabellen in der Datenbank basierend auf Ihren Go-Strukturen.
  • \n
  • Beziehungen zwischen Tabellen: Vereinfacht die Arbeit mit "Eins-zu-Viele", "Viele-zu-Viele" und "Eins-zu-Eins"-Beziehungen.
  • \n
  • Sicherheit: Integrierter Schutz vor SQL-Injection durch parametrisierte Abfragen.
  • \n
  • Leistung: Unterstützt Lazy Loading, Eager Loading und Caching.
  • \n
  • Community: Riesige Community, zahlreiche Plugins und Erweiterungen.
  • \n
\n\n

Installation von GORM

\n\n

GORM wird auf die für Go-Pakete übliche Weise installiert. Stellen Sie sicher, dass Go (Version 1.18+) installiert ist.

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

Hinweis: Anders als in Python (pip) oder Node.js (npm) gibt es in Go keinen einheitlichen Paketmanager. Der Befehl go get lädt den Quellcode herunter und kompiliert ihn in Ihr Projekt.

\n\n

Schnellstart mit einem Codebeispiel

\n\n

Erstellen wir eine einfache Anwendung zur Benutzerverwaltung mit SQLite.

\n\n
package main\n\nimport (\n    "fmt"\n    "gorm.io/driver/sqlite"\n    "gorm.io/gorm"\n)\n\n// User — Datenmodell, das der Tabelle in der DB entspricht\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. Verbindung zur Datenbank herstellen\n    db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})\n    if err != nil {\n        panic("failed to connect database")\n    }\n\n    // 2. Automigration — Tabelle erstellen\n    db.AutoMigrate(&User{})\n\n    // 3. Datensatz erstellen (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("Fehler beim Erstellen:", result.Error)\n    }\n    fmt.Printf("Benutzer mit ID erstellt: %d\\n", user.ID)\n\n    // 4. Datensatz lesen (Read)\n    var readUser User\n    db.First(&readUser, user.ID) // Suche nach Primärschlüssel\n    fmt.Printf("Gefundener Benutzer: %+v\\n", readUser)\n\n    // 5. Datensatz aktualisieren (Update)\n    db.Model(&readUser).Update("Age", 31)\n    fmt.Printf("Aktualisiertes Alter: %d\\n", readUser.Age)\n\n    // 6. Datensatz löschen (Delete)\n    db.Delete(&readUser)\n    fmt.Println("Benutzer gelöscht")\n}
\n\n

Wichtige Methoden/Funktionen von GORM

\n\n

1. gorm.Open(dialector, config)

\n

Was es tut: Stellt eine Verbindung zur Datenbank her. Gibt eine *gorm.DB-Instanz zurück.

\n

Parameter:

\n
    \n
  • dialector — Datenbanktreiber (z.B. sqlite.Open, mysql.Open, postgres.Open).
  • \n
  • config — GORM-Konfiguration (gorm.Config).
  • \n
\n

Beispiel:

\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

Was es tut: Erstellt oder aktualisiert automatisch T

Empfehlungen