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

Linda Hamilton
Freigeben: 2024-11-12 22:20:02
Original
810 Leute haben es durchsucht

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)
    }
}
Nach dem Login kopieren

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)
}
Nach dem Login kopieren

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!

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