Heim >Backend-Entwicklung >Golang >Wie kann ich Kontextinformationen in Go-HTTP-Handlern und Middleware übergeben und darauf zugreifen?

Wie kann ich Kontextinformationen in Go-HTTP-Handlern und Middleware übergeben und darauf zugreifen?

Susan Sarandon
Susan SarandonOriginal
2024-11-16 04:17:03849Durchsuche

How can I pass and access context information in Go HTTP Handlers and Middleware?

Übergabe von Kontext in Middleware und HandlerFunc

In Go bietet das Kontextpaket Funktionen zum Übergeben von Informationen zwischen Anforderungshandlern. Dies ist besonders nützlich für Middleware, die Aktionen vor und nach der Ausführung einer Handler-Funktion ausführen kann.

Kontext erstellen und übergeben

Im Kontext von Middleware haben wir Sie können einen neuen Kontext erstellen, indem Sie context.WithValue für den Kontext der Anforderung aufrufen und ein Schlüssel-Wert-Paar bereitstellen. Dieser neue Kontext sollte dann verwendet werden, wenn die ServeHTTP-Methode des Handlers aufgerufen wird.

Im bereitgestellten Codeausschnitt empfängt beispielsweise die Middleware-Funktion checkAuth den Anforderungskontext und das Authentifizierungstoken als Eingabe. Es gibt eine umschlossene Handlerfunktion zurück, die das Authentifizierungstoken überprüft.

func checkAuth(authToken string) util.Middleware {
    return func(h http.Handler) http.Handler {
        return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
            if r.Header.Get("Auth") != authToken {
                util.SendError(w, "...", http.StatusForbidden, false)
                return
            }
            h.ServeHTTP(w, r)
        })
    }
}

Um den Kontext mit dem Authentifizierungstoken zu initialisieren, können wir context.WithValue für den Kontext der Anfrage aufrufen, wie unten gezeigt:

func main() {
    authToken, ok := getAuthToken()
    if !ok {
        panic("...")
    }
    ctx := context.WithValue(r.Context(), "auth_token", authToken)
    router.Handle("/hello", util.UseMiddleware(authCheck, Handler, ...))
}

Dieser neue Kontext wird dann verwendet, wenn der Middleware-Handler die ServeHTTP-Methode des ursprünglichen Handlers aufruft.

Auf Kontext in Handlern zugreifen

Der Handler kann auf den Kontext zugreifen Informationen durch Aufruf von r.Context(), das den aktuellen Kontext zurückgibt. Der Wert kann mit der Value-Methode abgerufen werden, wie im folgenden Codeausschnitt gezeigt:

func (h *HandlerW) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    authToken := r.Context().Value("auth_token").(string)
    // ...
}

Das obige ist der detaillierte Inhalt vonWie kann ich Kontextinformationen in Go-HTTP-Handlern und Middleware übergeben und darauf zugreifen?. 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