Arbeiten mit Datenbanken in Go: PostgreSQL und MongoDB

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

Go (Golang) ist eine kompilierte, statisch typisierte Sprache, die für hohe Leistung und einfache Entwicklung entwickelt wurde. Einer der Hauptvorteile von Go ist seine umfangreiche Standardbibliothek und das Ökosystem an Treibern für die Arbeit mit Datenbanken. In diesem Artikel werden wir untersuchen, wie man eine Verbindung zu zwei der beliebtesten Datenbankmanagementsysteme (DBMS) herstellt und Operationen mit ihnen durchführt: dem relationalen PostgreSQL und der dokumentenorientierten MongoDB.

Wir werden die Installation von Treibern, das Schreiben von CRUD-Operationen (Create, Read, Update, Delete) und die besten Praktiken für jeden Datenbanktyp im Kontext von Go-Anwendungen behandeln.



1. Arbeiten mit PostgreSQL in Go

PostgreSQL ist ein leistungsstarkes, objektrelationales Open-Source-DBMS. Für die Arbeit damit in Go gibt es mehrere Treiber, aber die beliebtesten sind lib/pq und pgx. pgx ist moderner und leistungsfähiger, daher werden wir es verwenden.



1.1. Treiberinstallation

Installieren Sie das Paket pgx mit go get:

go get github.com/jackc/pgx/v5


1.2. Verbindung zur Datenbank herstellen

Erstellen wir eine Datei main.go und stellen eine Verbindung zu PostgreSQL her. Beachten Sie die Verwendung von Kontext (context.Background()) – dies ist ein Standardmuster in Go zur Verwaltung der Lebensdauer von Anfragen.

package main

import ( "context" "fmt" "log"

"github.com/jackc/pgx/v5/pgxpool")

func main() { // Verbindungszeichenfolge: postgres://username:password@host:port/dbname connString := "postgres://user:password@localhost:5432/mydb" // Erstellen eines Verbindungspools (für die Produktion empfohlen) pool, err := pgxpool.New(context.Background(), connString) if err != nil { log.Fatal("Verbindungspool konnte nicht erstellt werden:", err) } defer pool.Close() // Verbindung prüfen err = pool.Ping(context.Background()) if err != nil { log.Fatal("Verbindung zur Datenbank fehlgeschlagen:", err) } fmt.Println("Erfolgreich mit PostgreSQL verbunden!")}


1.3. Ausführen von SQL-Abfragen (CRUD)

Betrachten wir die grundlegenden Operationen am Beispiel der Tabelle users.



Tabelle erstellen (CREATE)

// Ausführen einer DDL-Abfrage_, err = pool.Exec(context.Background(), `    CREATE TABLE IF NOT EXISTS users (        id SERIAL PRIMARY KEY,        name VARCHAR(100) NOT NULL,        email VARCHAR(100) UNIQUE NOT NULL,        age INT    )`)if err != nil {    log.Fatal("Fehler beim Erstellen der Tabelle:", err)}


Daten einfügen (INSERT)

// Einfügen mit Rückgabe der IDvar userID interr = pool.QueryRow(context.Background(),    "INSERT INTO users (name, email, age) VALUES ($1, $2, $3) RETURNING id",    "Alexej", "alex@example.com", 30).Scan(&userID)if err != nil {    log.Fatal("Fehler beim Einfügen:", err)}fmt.Printf("Benutzer mit ID hinzugefügt: %d", userID)


Daten lesen (SELECT)

// Einen Benutzer abrufentype User struct {    ID    int    Name  string    Email string    Age   int}

var user Usererr = pool.QueryRow(context.Background(), "SELECT id, name, email, age FROM users WHERE id = $1", 1). Scan(&user.ID, &user.Name, &user.Email, &user.Age)if err != nil { log.Fatal("Benutzer nicht gefunden:", err)}fmt.Printf("Gefunden: %+v", user)


Aktualisieren und Löschen (UPDATE/DELETE)

// Aktualisieren_, err = pool.Exec(context.Background(),    "UPDATE users SET age = $1 WHERE id = $2", 31, 1)

// Löschen_, err = pool.Exec(context.Background(), "DELETE FROM users WHERE id = $1", 1)


2. Arbeiten mit MongoDB in Go

MongoDB ist eine führende NoSQL-Datenbank, die Speicher

Blogs

Buchempfehlungen