Maison > développement back-end > Golang > le corps du texte

Comment transmettre des arguments supplémentaires aux gestionnaires Gorilla Mux ?

Mary-Kate Olsen
Libérer: 2024-11-13 09:15:02
original
776 Les gens l'ont consulté

How to Pass Additional Arguments to Gorilla Mux Handlers?

Passer des arguments aux gestionnaires Gorilla Mux

Dans Gorilla Mux, les gestionnaires sont généralement enregistrés à l'aide de la méthode HandleFunc, qui prend une fonction qui accepte un http.ResponseWriter et un *http.Request comme arguments.

Limitations de la méthode standard

Cependant, lorsque vous avez besoin d'arguments supplémentaires dans vos gestionnaires, tels qu'un objet de base de données , la méthode HandleFunc par défaut présente des limites. Il n'accepte que deux arguments, ce qui rend difficile la transmission de paramètres supplémentaires.

Solutions possibles

Il existe quelques solutions de contournement pour surmonter cette limitation :

  1. Variables globales :
    Bien que cela soit généralement déconseillé dans Go, il est acceptable d'utiliser des variables globales pour les objets de base de données. Cela permet d'accéder facilement à la base de données à partir de n'importe quel gestionnaire.
  2. Gestionnaires basés sur la structure :
    Créez une structure de gestionnaire personnalisée et définissez des méthodes qui prennent les arguments nécessaires. La structure peut ensuite être intégrée dans la fonction de gestionnaire.

    type Users struct {
        db *gorm.DB
    }
    
    func (users *Users) ShowUserHandler(w http.ResponseWriter, r *http.Request) {
        // Access to the database object through users.db
    }
    
    // Register the handler
    router.HandleFunc("/users/{id}", users.ShowUserHandler).Methods("GET")
    Copier après la connexion
  3. Fonction Wrapper :
    Enveloppez le gestionnaire réel dans une fonction wrapper qui fournit le supplément arguments.

    db := createDB()
    router.HandleFunc("/users/{id}", func(w http.ResponseWriter, r *http.Request) {
        ShowUserHandler(w, r, db)
    }).Method("GET")
    Copier après la connexion

Le choix de l'approche dépend des exigences et des préférences de votre application. Si vous préférez ne pas avoir d'objets de base de données globaux ou si vous avez besoin de plus d'une instance de la base de données, les méthodes de fonction basées sur la structure ou sur le wrapper offrent plus de flexibilité.

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