Heim > Backend-Entwicklung > Golang > Wie kann ich Argumente an Anforderungshandler in Gorilla Mux übergeben?

Wie kann ich Argumente an Anforderungshandler in Gorilla Mux übergeben?

Linda Hamilton
Freigeben: 2024-11-17 06:22:03
Original
651 Leute haben es durchsucht

How can I pass arguments to request handlers in Gorilla Mux?

Übergabe von Argumenten an Request-Handler

Bei der Arbeit mit Gorilla Mux stoßen viele Entwickler auf die Einschränkung, Argumente direkt an Handler zu übergeben. Die HandleFunc-Methode akzeptiert nur einen Abschluss als zweiten Parameter, wodurch die Anzahl der Parameter begrenzt wird, die an den Handler übergeben werden können.

Global zugängliches Datenbankobjekt

Eine Gemeinsamkeit Die Lösung besteht darin, ein global zugängliches Datenbankobjekt zu verwenden. Obwohl dieser Ansatz oft akzeptabel ist, bevorzugen einige Entwickler aus verschiedenen Gründen, globale Variablen zu vermeiden, beispielsweise aus Gründen der Wartbarkeit und Testbarkeit.

Middleware

Middleware ist ein Mechanismus, der dies ermöglicht Entwickler können Anfragen abfangen und verarbeiten, bevor sie den Handler erreichen. Eine mögliche Problemumgehung besteht darin, eine Middleware-Funktion zu erstellen, die das Datenbankobjekt zum Anforderungskontext hinzufügt. Diese Middleware kann dann verwendet werden, um die Datenbank in den Handler einzuschleusen.

Zum Beispiel:

package main

import (
    "fmt"
    "net/http"

    "github.com/gorilla/mux"
    "gorm.io/gorm"
)

func main() {
    db := createDB()

    mux := mux.NewRouter()
    mux.Use(func(next http.Handler) http.Handler {
        return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
            // Add the database object to the request context
            r.Context() = context.WithValue(r.Context(), "db", db)
            // Pass the request to the next handler
            next.ServeHTTP(w, r)
        })
    })

    mux.HandleFunc("/users/{id}", showUserHandler).Methods("GET")
}

func showUserHandler(w http.ResponseWriter, r *http.Request) {
    // Retrieve the database object from the request context
    db := r.Context().Value("db").(*gorm.DB)

    fmt.Fprintf(w, "We should fetch the user with id %s", mux.Vars(r)["id"])
}
Nach dem Login kopieren

Wrapper-Funktionen

Eine weitere Problemumgehung besteht darin, Erstellen Sie Wrapper-Funktionen, die die zusätzlichen Parameter akzeptieren. Zum Beispiel:

db := createDB()

mux := mux.NewRouter()
mux.HandleFunc("/users/{id}", func(w http.ResponseWriter, r *http.Request) {
    showUserHandler(w, r, db)
}).Methods("GET")
Nach dem Login kopieren

Fazit

Es gibt verschiedene Ansätze zur Übergabe von Argumenten an Anforderungshandler in Gorilla Mux, einschließlich der Verwendung von Middleware und der Erstellung von Wrapper-Funktionen. Der beste Ansatz hängt von den spezifischen Anforderungen und Vorlieben des Entwicklers ab.

Das obige ist der detaillierte Inhalt vonWie kann ich Argumente an Anforderungshandler in Gorilla Mux übergeben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage