Passer des arguments aux gestionnaires Go
Dans le développement Web, les gestionnaires sont responsables du traitement des requêtes HTTP entrantes et du renvoi des réponses. Par défaut, Gorilla Mux, une bibliothèque de routage Go populaire, s'attend à ce que les gestionnaires soient définis comme des fonctions qui prennent deux paramètres : http.ResponseWriter et *http.Request.
Cependant, vous pouvez rencontrer des scénarios dans lesquels vous devez transmettre des arguments supplémentaires à vos gestionnaires, tels qu'un objet de base de données ou d'autres dépendances. Les variables globales peuvent être une solution pratique, mais elles peuvent également entraîner des problèmes potentiels.
Alternatives aux variables globales
Pour éviter d'utiliser des variables globales pour transmettre des arguments aux gestionnaires, plusieurs solutions de contournement sont disponibles :
1. Gestionnaires basés sur la structure
Vous pouvez définir une structure personnalisée qui intègre votre objet de base de données et contient les fonctions du gestionnaire. En créant une instance de cette structure, vous pouvez ensuite transmettre l'instance appropriée à chaque gestionnaire.
type Users struct { db *gorm.DB } func (users *Users) showHandler(w http.ResponseWriter, r *http.Request) { // Access the database object using users.db } // Create an instance of the Users struct users := &Users{db: createDB()} // Register the handler with Gorilla Mux, passing the Users instance router.HandleFunc("/users/{id}", users.showHandler).Methods("GET")
2. Fonctions wrapper
Vous pouvez créer une fonction wrapper qui accepte les arguments supplémentaires et appelle le gestionnaire réel :
// Create a database object db := createDB() // Define a wrapper function that takes the additional argument func showUserHandlerWrapper(w http.ResponseWriter, r *http.Request, db *gorm.DB) { showUserHandler(w, r, db) } // Register the wrapper function with Gorilla Mux router.HandleFunc("/users/{id}", showUserHandlerWrapper).Methods("GET")
Les deux approches fournissent des moyens de transmettre des arguments à vos gestionnaires Go tout en évitant l'utilisation de variables globales.
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!