Heim > Artikel > Backend-Entwicklung > Wie teile ich eine MySQL-Verbindung zwischen HTTP-Goroutinen in Go?
In Go kann die gleichzeitige Verwaltung von Datenbankverbindungen etwas verwirrend sein. In diesem Artikel wird untersucht, wie Sie eine MySQL-Verbindung effektiv zwischen mehreren HTTP-Goroutinen teilen können.
Bei Verwendung des Datenbank-/SQL-Pakets in Go wird durch den Aufruf von sql.Open() keine Sofortverbindung hergestellt Datenbankverbindung. Stattdessen wird ein Verbindungspool erstellt, eine Sammlung von Verbindungen, die vom Paket verwaltet werden. Das Paket kümmert sich automatisch um das Pooling und öffnet bei Bedarf neue Verbindungen.
Um die Verbindung zwischen main() und HTTP-Handlern zu teilen, deklarieren Sie eine globale Datenbankvariable:
var db *sql.DB
In main() den Verbindungspool initialisieren:
db, err := sql.Open("mysql", "root@unix(/tmp/mysql.sock)/mydb") if err != nil { log.Fatalf("Error on initializing database connection: %s", err.Error()) } db.SetMaxIdleConns(100) err = db.Ping() // Opens a connection if necessary if err != nil { log.Fatalf("Error on opening database connection: %s", err.Error()) }
HTTP-Handler können dann auf die freigegebene Datenbank zugreifen Verbindung:
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 eine MySQL-Verbindung effektiv zwischen mehreren HTTP-Goroutinen in Go teilen und so einen effizienten Datenbankzugriff ohne unnötigen Overhead gewährleisten.
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!