Arbeiten mit Datenbanken in Go: PostgreSQL und MongoDB für Anfänger

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

Einleitung: Warum Go und Datenbanken ein ideales Paar sind

\n

Go (Golang) ist eine moderne, kompilierte Sprache, die von Google entwickelt wurde. Ihre Hauptvorteile sind hohe Leistung, Einfachheit und integrierte Unterstützung für Nebenläufigkeit. Wenn es um die Arbeit mit Datenbanken geht, bietet Go leistungsstarke Standardbibliotheken und beliebte Drittanbieter-Treiber für jedes DBMS.

\n

In diesem Artikel werden wir uns ansehen, wie man eine Verbindung herstellt und grundlegende Operationen mit den beiden beliebtesten Datenbanken durchführt: der relationalen PostgreSQL und der dokumentenorientierten MongoDB. Das Material richtet sich an Anfänger, die bereits mit den Grundlagen der Go-Syntax vertraut sind.

\n\n

1. Vorbereitung der Umgebung und Installation der Treiber

\n

Bevor Sie Code schreiben, stellen Sie sicher, dass Go (Version 1.21+) installiert ist. Für die Arbeit mit Datenbanken benötigen wir Treiber. Installieren Sie diese mit den folgenden Befehlen:

\n
go get github.com/lib/pq          // für PostgreSQL\ngo get go.mongodb.org/mongo-driver // für MongoDB
\n

Stellen Sie außerdem sicher, dass die entsprechenden Datenbankserver auf Ihrem Rechner laufen (lokal oder über Docker).

\n\n

1.1. Projektstruktur

\n

Erstellen Sie eine Datei main.go. Der Einfachheit halber wird die gesamte Logik darin konzentriert. In realen Projekten sollte der Code in Pakete aufgeteilt werden.

\n\n

2. Arbeiten mit PostgreSQL in Go

\n

PostgreSQL ist ein leistungsstarkes relationales DBMS. Für die Arbeit damit in Go verwenden wir das Paket database/sql und den Treiber lib/pq.

\n\n

2.1. Verbindung zur Datenbank

\n

Erstellen wir eine Verbindungsfunktion. Die Verbindungszeichenfolge (DSN) enthält Host, Port, Benutzernamen und Datenbank.

\n
package main\n\nimport (\n    "database/sql"\n    "fmt"\n    "log"\n\n    _ "github.com/lib/pq"\n)\n\nfunc main() {\n    connStr := "host=localhost port=5432 user=postgres password=secret dbname=testdb sslmode=disable"\n    db, err := sql.Open("postgres", connStr)\n    if err != nil {\n        log.Fatal("Verbindungsfehler:", err)\n    }\n    defer db.Close()\n\n    // Verbindung prüfen\n    err = db.Ping()\n    if err != nil {\n        log.Fatal("Verbindung konnte nicht hergestellt werden:", err)\n    }\n    fmt.Println("Erfolgreich mit PostgreSQL verbunden!")\n}
\n

Wichtig: sql.Open erstellt keine echte Verbindung, sondern nur einen Pool. Die eigentliche Verbindung wird bei der ersten Anfrage oder beim Aufruf von Ping() hergestellt.

\n\n

2.2. Tabelle erstellen und Daten einfügen

\n

Jetzt erstellen wir eine Tabelle users und fügen einige Datensätze hinzu.

\n
// Tabelle erstellen\ncreateTable := `\nCREATE TABLE IF NOT EXISTS users (\n    id SERIAL PRIMARY KEY,\n    name VARCHAR(100) NOT NULL,\n    email VARCHAR(100) UNIQUE NOT NULL,\n    age INT\n);`\n_, err = db.Exec(createTable)\nif err != nil {\n    log.Fatal("Fehler beim Erstellen der Tabelle:", err)\n}\n\n// Daten einfügen\ninsert := `INSERT INTO users (name, email, age) VALUES ($1, $2, $3)`\n_, err = db.Exec(insert, "Ivan Petrov", "ivan@example.com", 30)\nif err != nil {\n    log.Fatal("Einfügefehler:", err)\n}\nfmt.Println("Daten hinzugefügt")
\n

Beachten Sie die Verwendung der Platzhalter $1, $2 – dies schützt vor SQL-Injection.

\n\n

2.3. Daten lesen und aktualisieren

\n

Führen wir eine Abfrage zum Lesen durch und aktualisieren das Alter des Benutzers.

\n
// Daten lesen\nrows, err := db.Query("SELECT id, name, email, age FROM users")\nif err != nil {\n    log.Fatal(err)\n}\ndefer rows.Close()\n\nfor rows.Next() {\n    var id int\n    var name, email string\n    var age int\n    err := rows.Scan(&id, &name, &email, &age)\n    if err != nil {\n        log.Fatal(err)\n    }\n    fmt.Printf("ID: %d, Name: %s, Email: %s, Alter: %d\\n", id, name, email, age)\n}\n\n// Aktualisieren\n_, err = db.Exec("UPDATE users SET age = $1 WHERE name = $2", 31, "Ivan Petrov")\nif err != nil {\n    log.Fatal(err)\n}\nfmt.Println("Alter aktualisiert")
\n\n

3. Arbeiten mit MongoDB

Blogs

Buchempfehlungen