Wie teile ich eine MySQL-Verbindung über mehrere HTTP-Goroutinen in Go?

Linda Hamilton
Freigeben: 2024-11-10 09:56:02
Original
545 Leute haben es durchsucht

How do I share a MySQL connection across multiple HTTP goroutines in Go?

MySQL-Verbindungen in Go-HTTP-Goroutinen teilen

Bei der Arbeit mit HTTP-Goroutinen in Go ist es wichtig, die Leistung durch die gemeinsame Nutzung von Datenbankverbindungen zu optimieren. In diesem Artikel wird gezeigt, wie Sie eine MySQL-Verbindung zwischen mehreren HTTP-Handlern herstellen und teilen.

Datenbankverbindungsverwaltung

In Go verwaltet das Datenbank-/SQL-Paket automatisch das Verbindungspooling. Beim Aufruf von sql.Open(...) wird ein Verbindungspool und nicht eine einzelne Verbindung erstellt. Dies bedeutet, dass das Datenbank-/SQL-Paket automatisch eine Verbindung aus dem Pool erhält, wenn alle Verbindungen bereits verwendet werden.

Code-Implementierung

Um eine MySQL-Verbindung in Ihren HTTP-Goroutinen freizugeben, befolgen Sie diese Schritte:

  1. Initialisieren Sie die Datenbankverbindung:

    • Öffnen Sie einen Verbindungspool mit sql.Open("mysql", "< Connection_string>").

    Beispiel:

    db, err := sql.Open("mysql", "root:@/mydb?charset=utf8")
    if err != nil {
        log.Fatalf("Error opening database: %v", err)
    }
    Nach dem Login kopieren
  2. Verbindungspooling konfigurieren:

    • Passen Sie die maximale Anzahl inaktiver Verbindungen mit db.SetMaxIdleConns(100) an.
  3. Verbindungshandle freigeben:

    • Deklarieren Sie die Datenbankvariable als globale Variable, um sie zwischen Haupt- und HTTP-Handlern zu teilen.

    Beispiel:

    var db *sql.DB
    Nach dem Login kopieren
  4. Datenbankverbindung prüfen:

    • Rufen Sie db.Ping() in main() auf, um eine erste Verbindung zur Datenbank herzustellen.

    Beispiel:

    err = db.Ping()
    if err != nil {
        log.Fatalf("Error opening database connection: %s", err.Error())
    }
    Nach dem Login kopieren
  5. Verbindung in HTTP-Handlern verwenden:

    • Im HTTP-Handler , verwenden Sie das Shared DB-Handle, um Datenbankabfragen auszuführen.

    Beispiel:

    func HomeHandler(w http.ResponseWriter, r *http.Request) {
        var msg string
        err := db.QueryRow("SELECT msg FROM hello WHERE page=?", "home").Scan(&msg)
        if err != nil {
            fmt.Fprintf(w, "Database Error!")
        } else {
            fmt.Fprintf(w, msg)
        }
    }
    Nach dem Login kopieren

Indem Sie diese Schritte befolgen, können Sie Teilen Sie eine MySQL-Verbindung effizient über mehrere HTTP-Goroutinen hinweg, ohne die Leistung zu beeinträchtigen.

Das obige ist der detaillierte Inhalt vonWie teile ich eine MySQL-Verbindung über mehrere HTTP-Goroutinen in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage