Maison > développement back-end > Golang > Comment partager une connexion MySQL entre des goroutines HTTP dans Go ?

Comment partager une connexion MySQL entre des goroutines HTTP dans Go ?

Linda Hamilton
Libérer: 2024-11-27 03:40:14
original
334 Les gens l'ont consulté

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

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
Copier après la connexion

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())
    }
}
Copier après la connexion

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)
    }
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal