Wie kann ich Argumente an Go-Handler übergeben, ohne globale Variablen zu verwenden?

Patricia Arquette
Freigeben: 2024-11-12 17:01:02
Original
996 Leute haben es durchsucht

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

Ü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")
Nach dem Login kopieren

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")
Nach dem Login kopieren

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!

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