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

Wie teile ich eine MySQL-Verbindung zwischen HTTP-Goroutinen in Go?

Linda Hamilton
Linda HamiltonOriginal
2024-11-27 03:40:14302Durchsuche

How to Share a MySQL Connection between HTTP Goroutines in Go?

Wie teile ich eine MySQL-Verbindung zwischen HTTP-Goroutinen?

In Go vereinfacht das Datenbank/SQL-Paket die gemeinsame Nutzung von Datenbankverbindungen zwischen HTTP-Goroutinen . Durch die Erstellung eines Verbindungspools wird das Öffnen und Schließen von Datenbankverbindungen automatisch verwaltet.

Die Funktion sql.Open(...) gibt ein Verbindungspool-Handle zurück, nicht nur eine einzelne Verbindung. Das Datenbank-/SQL-Paket kümmert sich um das Öffnen neuer Verbindungen, wenn der Pool vollständig ausgelastet ist.

Um die Datenbankverbindung im bereitgestellten Codebeispiel freizugeben, instanziieren Sie die Datenbankverbindung in der Funktion main() und weisen Sie sie einer globalen Variablen zu um den Zugriff durch den HTTP-Handler zu erleichtern.

var db *sql.DB // Global variable for sharing between main and HTTP handler

Verwenden Sie dann in der Funktion main() sql.Open(...), um den Verbindungspool zu initialisieren. SetMaxIdleConns(...) konfiguriert die Anzahl der inaktiven Verbindungen im Pool. Ein Ping()-Aufruf sorgt dafür, dass bei Bedarf eine Verbindung hergestellt wird.

func main() {
    var err error
    db, err = sql.Open("mysql", "root@unix(/tmp/mysql.sock)/mydb") // This opens a connection pool
    if err != nil {
        log.Fatalf("Error on initializing database connection: %s", err.Error())
    }

    db.SetMaxIdleConns(100)

    err = db.Ping() // This actually opens a connection if necessary
    if err != nil {
        log.Fatalf("Error on opening database connection: %s", err.Error())
    }
}

Verwenden Sie im HomeHandler-HTTP-Handler die globale DB-Variable, um Abfragen auszuführen.

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

Befolgen Sie dazu Folgendes Mit diesem Ansatz kann die Datenbankverbindung effizient von HTTP-Goroutinen gemeinsam genutzt werden, ohne dass die Verbindung manuell geöffnet und geschlossen werden muss.

Das obige ist der detaillierte Inhalt vonWie teile ich eine MySQL-Verbindung zwischen 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