Dans Go, la gestion des connexions à la base de données en simultané peut être un peu déroutante. Cet article explique comment partager efficacement une connexion MySQL entre plusieurs goroutines HTTP.
Lors de l'utilisation du package base de données/sql dans Go, l'appel de sql.Open() n'établit pas de lien immédiat connexion à la base de données. Au lieu de cela, il crée un pool de connexions, un ensemble de connexions gérées par le package. Le package gère automatiquement le pooling, ouvrant de nouvelles connexions si nécessaire.
Pour partager la connexion entre les gestionnaires main() et HTTP, déclarez une variable de base de données globale :
var db *sql.DB
Dans main(), initialisez le pool de connexions :
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()) }
Les gestionnaires HTTP peuvent alors accéder à la base de données partagée connexion :
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 ces étapes, vous pouvez partager efficacement une connexion MySQL entre plusieurs goroutines HTTP dans Go, garantissant un accès efficace à la base de données sans surcharge inutile.
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!