Dans Gorilla Mux, par défaut, les gestionnaires reçoivent uniquement http.ResponseWriter et *http.Request. Cependant, il existe des scénarios dans lesquels il est nécessaire de transmettre des arguments supplémentaires aux gestionnaires, comme un objet de connexion à une base de données.
Une façon d'y parvenir est pour définir un type personnalisé qui contient les données supplémentaires et implémente l'interface http.HandlerFunc.
type UserHandler struct { db *gorm.DB } func (h UserHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { // here you can use db } // usage: db := createDB() users := UserHandler{db: db} router.HandleFunc("/users/{id}", users.ServeHTTP)
Une autre option consiste à utiliser une fonction de fermeture pour envelopper le gestionnaire réel et injecter l'argument supplémentaire.
func showUserHandler(db *gorm.DB) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { // here you can use db } } // usage: db := createDB() router.HandleFunc("/users/{id}", showUserHandler(db))
Dans certains scénarios, l'utilisation de variables globales peut être acceptable, en particulier pour les ressources partagées telles que les connexions à une base de données. Cependant, il est important de les utiliser avec parcimonie et de comprendre les inconvénients potentiels.
var db *gorm.DB = createDB() func showUserHandler(w http.ResponseWriter, r *http.Request) { // here you can use db } // usage: router.HandleFunc("/users/{id}", showUserHandler)
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!