Heim  >  Artikel  >  Backend-Entwicklung  >  Wofür wird der Golang-Kontext verwendet?

Wofür wird der Golang-Kontext verwendet?

(*-*)浩
(*-*)浩Original
2019-12-03 09:52:453018Durchsuche

Wofür wird der Golang-Kontext verwendet?

context ist seit Go1.7 in der Standardbibliothek enthalten. Sein Hauptzweck besteht in einem Satz darin, den Lebenszyklus von Goroutine zu steuern. Wenn eine Rechenaufgabe von einer Goroutine übernommen wird und wir die Rechenaufgabe der Goroutine aus irgendeinem Grund (Zeitüberschreitung oder erzwungenes Beenden) abbrechen möchten, wird dieser Kontext verwendet. (Empfohlenes Lernen: GO )

Für Golang-Entwickler darf das Context-Paket (Kontext) nicht unbekannt sein. Aber oft sind wir faul und sehen es einfach oder sehen, welche Rolle es spielen kann, und beschäftigen uns nicht damit.

Anwendungsszenario: Im Server of the Go-http-Paket verfügt jede Anfrage über eine entsprechende Goroutine, um sie zu verarbeiten.

Anforderungsverarbeitungsfunktionen starten normalerweise zusätzliche Goroutinen, um auf Back-End-Dienste wie Datenbanken und RPC-Dienste zuzugreifen.

Die zur Verarbeitung einer Anfrage verwendete Goroutine muss normalerweise auf einige für die Anfrage spezifische Daten zugreifen, z. B. die Identitätsauthentifizierungsinformationen des Endbenutzers, verifizierungsbezogene Token und die Frist der Anfrage.

Wenn eine Anfrage abgebrochen wird oder eine Zeitüberschreitung auftritt, sollten alle zur Verarbeitung der Anfrage verwendeten Goroutinen schnell beendet werden, bevor das System die von diesen Goroutinen belegten Ressourcen freigeben kann

Kontextprinzip

Kontextaufrufe sollten verkettet werden und neue Kontexte werden über WithCancel, WithDeadline, WithTimeout oder WithValue abgeleitet. Wenn ein übergeordneter Kontext gelöscht wird, werden alle davon abgeleiteten Kontexte gelöscht.

Die Übergabe von context.WithXXX gibt einen neuen Kontext und CancelFunc zurück. Durch den Aufruf von CancelFunc wird das untergeordnete Element abgebrochen, der Verweis des übergeordneten Elements auf das untergeordnete Element entfernt und alle Timer gestoppt. Wenn CancelFunc nicht aufgerufen wird, werden untergeordnete Elemente verloren, bis das übergeordnete Element abgebrochen wird oder ein Timer ausgelöst wird. Das Go-Vet-Tool überprüft alle Prozesssteuerungspfade mithilfe von CancelFuncs.

Befolgen Sie die Regeln

Befolgen Sie die folgenden Regeln, um die Schnittstellen zwischen Paketen konsistent zu halten und statische Analysetools zur Überprüfung der Kontextweitergabe zu aktivieren.

Fügen Sie keine Kontexte in die Struktur ein. Stattdessen sollte der Kontext als erster Parameter mit dem Namen ctx übergeben werden. func DoSomething(ctx context.Context, arg Arg) error { // ... use ctx ... }

Übergeben Sie keinen Null-Kontext, auch wenn die Funktion dies zulässt. Wenn Sie nicht wissen, welchen Kontext Sie verwenden sollen, können Sie context.TODO() verwenden.

Wertbezogene Methoden, die Kontext verwenden, sollten nur für anforderungsbezogene Metadaten verwendet werden, die in Programmen und Schnittstellen übergeben werden. Verwenden Sie sie nicht, um einige optionale Parameter zu übergeben.

Derselbe Kontext kann an verschiedene Goroutinen übergeben werden ; Der Kontext ist parallelitätssicher.

Das obige ist der detaillierte Inhalt vonWofür wird der Golang-Kontext verwendet?. 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