Ü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"]) }
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")
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!