Golang -Kontext

Golang -Kontext
Eines der nützlichsten Funktionen in der Go -Programmiersprache sind Kontexte. Der Kontext bietet vielseitige Funktionen für Anwendungen wie Freigabe von Daten, Anruferstornierungen, Fristen usw.

Der Kontext ist so nützlich, dass viele Bibliotheken im Go -Ökosystem sie verwenden. Sie finden sie auch in Anwendungen, die mit Remote -Servern, Datenbanken, API -Aufrufen und mehr interagieren.

Für diesen Artikel werden wir eine Einführung in das Kontextpaket für Anfänger in Go und wie der Kontext für verschiedene Anwendungsfälle verwendet.

Kontext mit Wert

Einer der Hauptanwendungsfälle von Kontexten in GO besteht darin. Das Golang -Kontextpaket bietet Ihnen die With -Wert -Funktion, mit der Sie Daten freigeben können.

Die Funktionssyntax ist wie gezeigt:

Func WithValue (übergeordneter Kontext, Schlüssel, VAL -Schnittstelle ) Kontext

Die Funktion nimmt einen Kontext, einen Schlüssel und einen Wert als Parameter vor. Die Funktion erstellt dann einen neuen Kontext basierend auf dem bereitgestellten übergeordneten über und fügt dem festgelegten Schlüssel einen angegebenen Wert hinzu.

Betrachten Sie es als einen internen Kontext mit einem Schlüsselwertepaartyp im Inneren. Sie können dann Werte vom Typ abrufen oder abrufen.

Betrachten Sie das folgende Beispiel unten, der zeigt, wie die With -Wert -Funktion verwendet wird und Werte daraus abrufen.

Paket Main
importieren "fmt"
"Kontext" importieren "
funcmain ()
CTX: = Kontext.Hintergrund()
CTX = AddValues ​​(CTX)
RetrieveValue (CTX)

funcaddValues ​​(CTX -Kontext.Kontext) Kontext.Kontext
Kontext zurückgeben.With SValue (CTX, "Schlüssel", "Wert")

FuncetrieveValue (CTX -Kontext.Kontext)
Wert: = CTX.Wert ("Schlüssel")
fmt.Println (Wert)

Konzentrieren Sie sich auf die Hauptfunktion des obigen Codes. Wir beginnen mit dem Erstellen eines neuen Kontextobjekts, CTX, mit dem Kontext.Hintergrund () Funktion.

Die Hintergrundfunktion gibt dann einen leeren Nicht-Nil-Kontext ohne Stornierungen, ohne Werte und ohne Fristen zurück.

Die Hintergrundfunktion dient als Initialisierung für eingehende Kontextanforderungen.

Kontext werden Werte festgelegt

Der zweite Teil der Funktion ist die Funktion addValues ​​(). Wir nehmen einen neuen Kontext und binden ihn in diesem Beispiel an einen vorhandenen Kontext. Der neue Kontext enthält den Schlüssel, um den Kontext hinzuzufügen.

Beachten Sie, dass die With -Wert -Funktion eine Kopie des übergeordneten Kontexts zurückgibt und den vorhandenen Kontext nicht ändert.

Der Kontext ruft Werte ab

Der zweite Teil des Programms ist die Funktion retrieveValue (). In diesem Fall nehmen wir die Kontextstruktur an und holen die mit dem angegebenen Schlüssel zugeordneten Werte ab.

Wenn der Schlüssel im Kontext vorhanden ist, sollte die Funktion den zugehörigen Wert zurückgeben.

Wenn der Schlüssel nicht vorhanden ist, sollte die Funktion Nil zurückgeben. Wir können eine bedingte Logik implementieren, um zu überprüfen.

Kontext mit Timeout

Ein weiterer häufiger Anwendungsfall von Kontexten ist der Umgang mit Timeouts. Zum Beispiel müssen Sie möglicherweise eine Zeitüberschreitung in bestimmten Anwendungen definieren, wenn keine angegebene Aktion ausgeführt wird. Dies ist unglaublich einfach zu implementieren mit der Withtimeout -Funktion aus dem Kontextpaket. Sehen wir uns an, wie wir Timeout mit dem Kontextpaket implementieren können.

Paket Main
importieren (
"Kontext"
"fmt"
"Zeit"
)
funcmain ()
CTX, Abbrechen: = Kontext.Mit Timeout (Kontext.Hintergrund (), 5*Zeit.Zweite)
Aufhebung stornieren ()
CTX = AddValues ​​(CTX)
GO RECRIEVEVALUES (CTX)
wählen
Fall<-ctx.Done():
fmt.Println ("dauerte zu lange!"))

Zeit.Schlaf (5 * Zeit.Zweite)

funcaddValues ​​(CTX -Kontext.Kontext) Kontext.Kontext
Kontext zurückgeben.With SValue (CTX, "Schlüssel", "Wert")

Funcetrievevalues ​​(CTX -Kontext.Kontext)
für
wählen
Fall<-ctx.Done():
fmt.Println ("Timeout")
zurückkehren
Standard:
Wert: = CTX.Wert ("Schlüssel")
fmt.Println (Wert)

Zeit.Schlaf (1 * Zeit.Zweite)

In diesem Beispiel definieren wir eine Abbrechenfunktion mit dem Kontext.Mit Timeout -Funktion. Wir können dann die Abbrechenfunktion manuell auslösen, wenn wir es für richtig halten.

Sobald der Zeitüberschreitungswert erreicht ist, wird die Abbrechenfunktion aufgerufen und führt die angegebene Logik aus.

In unserer Funktion zur Wertschöpfungswerbung rufen wir den Wert kontinuierlich mit der angegebenen Taste mit der For -Loop ab. Wir prüfen auch, ob der fertiggestellte Kanal aus dem Hauptkontext noch lebt. Wenn das Timeout nicht überschritten ist, ist der übergeordnete Kontext weiterhin geöffnet, aber sobald das Timeout erreicht ist, wird der Kontext abgebrochen.

In unserem Beispiel läuft die Funktion alle 1 Sekunde, bevor die Zeitüberschreitung erreicht ist. Ein Beispielausgang ist wie gezeigt:

Wert
Wert
Wert
Wert
Wert
Zu lange gedauert!
Auszeit

Abschluss

Dies war ein kurzes und grundlegendes Tutorial, in dem Kontexte diskutierte und wie man sie in Ihren GO -Programmen einsetzt. Sie können die Dokumentation überprüfen, um mehr über Go -Kontexte zu untersuchen.