Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann der Kontext effektiv an Middleware und Handler in Golang übergeben werden?

Wie kann der Kontext effektiv an Middleware und Handler in Golang übergeben werden?

Barbara Streisand
Barbara StreisandOriginal
2024-11-10 10:36:02244Durchsuche

How to Effectively Pass Context to Middleware and Handlers in Golang?

Kontext in Golang-Anfrage an Middleware übergeben

Das Verständnis des in Golang 1.7 eingeführten Kontextmechanismus kann eine Herausforderung sein. In diesem Artikel soll erläutert werden, wie Kontext effektiv an Middleware- und Handlerfunktionen übergeben werden kann.

Ableiten von Kontexten

Wie im Blogbeitrag „Go Concurrency Patterns“ erwähnt, können Sie Kontexte ableiten aus dem Hintergrundkontext. Das Request-Objekt stellt auch die Methoden Context und WithContext bereit. Dadurch können Sie benutzerdefinierte Kontexte für bestimmte Zwecke erstellen.

Timeout implementieren

In Ihrem Anforderungshandler können Sie mithilfe der WithTimeout-Methode ein Timeout angeben. Dadurch wird ein abgeleiteter Kontext mit einem festgelegten Zeitlimit erstellt.

ctx, cancel := context.WithTimeout(r.Context(), time.Duration(60*time.Second))
defer cancel()
r = r.WithContext(ctx)

Benutzerinformationen zum Kontext hinzufügen

In Ihrem Autorisierungsprüfer können Sie zuvor Benutzerinformationen zum Kontext hinzufügen Aufruf von ServeHTTP.

type ContextKey string

const ContextUserKey ContextKey = "user"

// ...

ctx := context.WithValue(r.Context(), ContextUserKey, "theuser")
h.ServeHTTP(w, r.WithContext(ctx))

Abrufen von Benutzerinformationen aus dem Kontext

Aus dem Handler heraus können Sie auf die Benutzerinformationen aus dem Kontext zugreifen.

user := r.Context().Value(ContextUserKey)
doSomethingForThisUser(user.(string))

Middleware mit Kontext verketten

In Ihrer Hauptfunktion können Sie Middleware-Handler mit util.UseMiddleware verketten und dabei den Kontext über jeden Handler weitergeben.

router.Handle("/hello", util.UseMiddleware(authCheck, HandlerW, ...))

Fazit

Indem Sie diese Schritte befolgen, können Sie den Kontext in Golang-Anfragen effektiv an Middleware- und Handlerfunktionen übergeben, wodurch die Flexibilität erhöht und die Thread-Sicherheit in Ihrem Code aufrechterhalten wird.

Das obige ist der detaillierte Inhalt vonWie kann der Kontext effektiv an Middleware und Handler in Golang übergeben werden?. 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