Maison > développement back-end > Golang > Comment puis-je transmettre des arguments aux gestionnaires Go sans utiliser de variables globales ?

Comment puis-je transmettre des arguments aux gestionnaires Go sans utiliser de variables globales ?

Patricia Arquette
Libérer: 2024-11-12 17:01:02
original
1060 Les gens l'ont consulté

How Can I Pass Arguments to Go Handlers Without Using Global Variables?

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

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

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!

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