Heim  >  Artikel  >  Backend-Entwicklung  >  Wie teile ich ein MySQL-Verbindungshandle zwischen Go-HTTP-Handlern?

Wie teile ich ein MySQL-Verbindungshandle zwischen Go-HTTP-Handlern?

Linda Hamilton
Linda HamiltonOriginal
2024-11-12 22:20:02852Durchsuche

How to Share a MySQL Connection Handle Between Go HTTP Handlers?

MySQL-Verbindungen in Go-HTTP-Handlern verwalten

Das Datenbank-/SQL-Paket in Go verwaltet Datenbankverbindungen und verwaltet automatisch das Verbindungspooling. Beim Aufruf von sql.Open() wird ein Handle zurückgegeben, das einen Verbindungspool verwaltet. Dieses Handle stellt nach Bedarf neue Verbindungen her und stellt so sicher, dass immer eine Verbindung für Datenbankoperationen verfügbar ist.

Gemeinsame Nutzung des Datenbankverbindungshandles

In Ihrem Code haben Sie eine erstellt globale Variable db vom Typ *sql.DB in der main()-Funktion. Diese Variable stellt das Verbindungspool-Handle dar. Um es mit den HTTP-Handlern zu teilen, können Sie das Datenbankhandle als Parameter an die Handlerfunktionen übergeben.

Verwendung des Verbindungshandles in HTTP-Handlern

Im HomeHandler Mit der Funktion können Sie auf die Datenbankverbindung zugreifen, indem Sie das Datenbankhandle verwenden, das als Parameter übergeben wird:

import (
    "database/sql"
    "fmt"
)

func HomeHandler(w http.ResponseWriter, r *http.Request, db *sql.DB) {
    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)
    }
}

HTTP-Handler-Registrierung

In der main()-Funktion , wenn Sie die HTTP-Handler registrieren, können Sie das DB-Handle als Argument übergeben:

import (
    "github.com/gorilla/mux"
)

func main() {
    fmt.Println("starting up")

    db, err := sql.Open("mysql", "root@unix(/tmp/mysql.sock)/mydb")
    if err != nil {
        log.Fatalf("Error on initializing database connection: %s", err.Error())
    }
    
    r := mux.NewRouter()
    r.HandleFunc("/", HomeHandler(db)) // Pass the db handle as an argument to the handler

    http.Handle("/", r)
    http.ListenAndServe(":8080", nil)
}

Indem Sie diese Schritte befolgen, können Sie die MySQL-Verbindung zwischen HTTP-Goroutinen in Go effektiv teilen. Das automatische Verbindungspooling des Datenbank-/SQL-Pakets sorgt für optimale Leistung und Ressourcenverwaltung.

Das obige ist der detaillierte Inhalt vonWie teile ich ein MySQL-Verbindungshandle zwischen Go-HTTP-Handlern?. 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