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 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!