Heim >Backend-Entwicklung >Golang >Wie übergebe ich zusätzliche Argumente an Handlerfunktionen in Gorilla Mux?

Wie übergebe ich zusätzliche Argumente an Handlerfunktionen in Gorilla Mux?

Susan Sarandon
Susan SarandonOriginal
2024-11-17 15:28:02898Durchsuche

How to Pass Additional Arguments to Handler Functions in Gorilla Mux?

Handhabung von Handler-Argumenten mit Gorilla Mux

In Gorilla Mux erhalten Handler standardmäßig nur http.ResponseWriter und *http.Request. Es gibt jedoch Szenarien, in denen die Übergabe zusätzlicher Argumente an Handler erforderlich ist, beispielsweise an ein Datenbankverbindungsobjekt.

Ansatz 1: Handler als Methode eines benutzerdefinierten Typs

Eine Möglichkeit, dies zu erreichen, ist um einen benutzerdefinierten Typ zu definieren, der die zusätzlichen Daten enthält und die http.HandlerFunc-Schnittstelle implementiert.

type UserHandler struct {
    db *gorm.DB
}

func (h UserHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    // here you can use db
}

// usage:
db := createDB()
users := UserHandler{db: db}
router.HandleFunc("/users/{id}", users.ServeHTTP)

Ansatz 2: Schließung Funktion

Eine weitere Option besteht darin, eine Abschlussfunktion zu verwenden, um den eigentlichen Handler zu umschließen und das zusätzliche Argument einzufügen.

func showUserHandler(db *gorm.DB) http.HandlerFunc {
    return func(w http.ResponseWriter, r *http.Request) {
        // here you can use db
    }
}

// usage:
db := createDB()
router.HandleFunc("/users/{id}", showUserHandler(db))

Ansatz 3: Globale Variablen

In bestimmten Szenarien Die Verwendung globaler Variablen kann akzeptabel sein, insbesondere für gemeinsam genutzte Ressourcen wie Datenbankverbindungen. Es ist jedoch wichtig, sie sparsam zu verwenden und die möglichen Nachteile zu verstehen.

var db *gorm.DB = createDB()

func showUserHandler(w http.ResponseWriter, r *http.Request) {
    // here you can use db
}

// usage:
router.HandleFunc("/users/{id}", showUserHandler)

Tipps

  • Es wird im Allgemeinen nicht empfohlen, eine globale Variable für das Datenbankobjekt zu verwenden, da dies möglich ist Dies kann zu Parallelitätsproblemen führen.
  • Der beste Ansatz hängt von Ihren spezifischen Anforderungen ab.
  • Für eine einzelne Datenbank Für ein Objekt ist der Verschlussfunktions- oder Handler-Methoden-Ansatz besser geeignet.
  • Für mehrere Instanzen oder komplexere Abhängigkeiten sollten Sie erwägen, einen benutzerdefinierten Kontexttyp zu erstellen, der über die Handler übergeben werden kann.

Das obige ist der detaillierte Inhalt vonWie übergebe ich zusätzliche Argumente an Handlerfunktionen in Gorilla Mux?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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