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

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

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-18 06:14:02392parcourir

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

Partage de la connexion MySQL entre les goroutines HTTP dans Go

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.

Présentation

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.

Partage de la connexion

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)
    }
}

Conclusion

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!

Déclaration:
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