Heim > Backend-Entwicklung > Golang > 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
Freigeben: 2024-11-10 10:36:02
Original
291 Leute haben es durchsucht

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

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

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

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

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!

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