Übergabe von Argumenten an Go-Handler
In der Webentwicklung sind Handler für die Verarbeitung eingehender HTTP-Anfragen und die Rückgabe von Antworten verantwortlich. Standardmäßig erwartet Gorilla Mux, eine beliebte Go-Routing-Bibliothek, dass Handler als Funktionen definiert werden, die zwei Parameter annehmen: http.ResponseWriter und *http.Request.
Es kann jedoch vorkommen, dass Sie auf Szenarien stoßen, in denen Sie übergeben müssen zusätzliche Argumente für Ihre Handler, z. B. ein Datenbankobjekt oder andere Abhängigkeiten. Globale Variablen können eine praktische Lösung sein, können aber auch zu potenziellen Problemen führen.
Alternativen zu globalen Variablen
Um die Verwendung globaler Variablen für die Übergabe von Argumenten an Handler zu vermeiden, Es stehen mehrere Problemumgehungen zur Verfügung:
1. Strukturbasierte Handler
Sie können eine benutzerdefinierte Struktur definieren, die Ihr Datenbankobjekt einbettet und die Handlerfunktionen enthält. Indem Sie eine Instanz dieser Struktur erstellen, können Sie dann die entsprechende Instanz an jeden Handler übergeben.
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. Wrapper-Funktionen
Sie können eine Wrapper-Funktion erstellen, die die zusätzlichen Argumente akzeptiert und den eigentlichen Handler aufruft:
// 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")
Beide Ansätze bieten Möglichkeiten, Argumente an Ihre Go-Handler zu übergeben und gleichzeitig zu vermeiden die Verwendung globaler Variablen.
Das obige ist der detaillierte Inhalt vonWie kann ich Argumente an Go-Handler übergeben, ohne globale Variablen zu verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!