Maison  >  Article  >  développement back-end  >  Comment partager un handle de connexion MySQL entre les gestionnaires HTTP Go ?

Comment partager un handle de connexion MySQL entre les gestionnaires HTTP Go ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-12 22:20:02851parcourir

How to Share a MySQL Connection Handle Between Go HTTP Handlers?

Gestion des connexions MySQL dans les gestionnaires HTTP Go

Le package base de données/sql dans Go gère les connexions à la base de données et gère automatiquement le pool de connexions. Lors de l’appel de sql.Open(), il renvoie un handle qui gère un pool de connexions. Ce handle établit de nouvelles connexions selon les besoins, garantissant ainsi qu'il y a toujours une connexion disponible pour les opérations de base de données.

Partage du handle de connexion à la base de données

Dans votre code, vous avez créé un variable globale db de type *sql.DB dans la fonction main(). Cette variable représente le handle du pool de connexions. Pour le partager avec les gestionnaires HTTP, vous pouvez transmettre le handle de base de données en tant que paramètre aux fonctions du gestionnaire.

Utilisation du handle de connexion dans les gestionnaires HTTP

Dans le HomeHandler fonction, vous pouvez accéder à la connexion à la base de données en utilisant le handle db qui est passé en paramètre :

import (
    "database/sql"
    "fmt"
)

func HomeHandler(w http.ResponseWriter, r *http.Request, db *sql.DB) {
    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)
    }
}

HTTP Enregistrement du gestionnaire

Dans la fonction main(), lors de l'enregistrement des gestionnaires HTTP, vous pouvez passer le handle de base de données en argument :

import (
    "github.com/gorilla/mux"
)

func main() {
    fmt.Println("starting up")

    db, err := sql.Open("mysql", "root@unix(/tmp/mysql.sock)/mydb")
    if err != nil {
        log.Fatalf("Error on initializing database connection: %s", err.Error())
    }
    
    r := mux.NewRouter()
    r.HandleFunc("/", HomeHandler(db)) // Pass the db handle as an argument to the handler

    http.Handle("/", r)
    http.ListenAndServe(":8080", nil)
}

En suivant ces étapes, vous pouvez partagez efficacement la connexion MySQL entre les goroutines HTTP dans Go. Le regroupement automatique des connexions du package base de données/sql garantit des performances et une gestion des ressources optimales.

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