Comment partager la connexion MySQL entre les goroutines HTTP ?
Dans Go, le package base de données/sql simplifie le partage des connexions de base de données entre les goroutines HTTP . En créant un pool de connexions, il gère automatiquement l'ouverture et la fermeture des connexions à la base de données.
La fonction sql.Open(...) renvoie un handle de pool de connexions, pas seulement une seule connexion. Le package base de données/sql gère l'ouverture de nouvelles connexions lorsque le pool est pleinement utilisé.
Pour partager la connexion à la base de données dans l'exemple de code fourni, instanciez la connexion à la base de données dans la fonction main() et attribuez-la à une variable globale. pour faciliter son accès par le gestionnaire HTTP.
var db *sql.DB // Global variable for sharing between main and HTTP handler
Ensuite, dans la fonction main(), utilisez sql.Open(...) pour initialiser le pool de connexions. SetMaxIdleConns(...) configure le nombre de connexions inactives dans le pool. Un appel Ping() garantit qu'une connexion est établie si nécessaire.
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()) } }
Dans le gestionnaire HTTP HomeHandler, utilisez la variable globale db pour exécuter des requêtes.
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) } }
En suivant ceci approche, la connexion à la base de données peut être partagée efficacement entre les goroutines HTTP sans avoir besoin d'une ouverture et d'une fermeture manuelles de la connexion.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!