Heim >Backend-Entwicklung >Golang >Wie teile ich eine MySQL-Verbindung über mehrere HTTP-Goroutinen in Go?

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

Linda Hamilton
Linda HamiltonOriginal
2024-11-10 09:56:02577Durchsuche

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)
    }
  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
  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())
    }
  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)
        }
    }

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!

Stellungnahme:
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