Kontekst Golang

Kontekst Golang
Jedną z najbardziej przydatnych funkcji w języku programowania Go są konteksty. Kontekst zapewnia wszechstronne funkcje aplikacji, takie jak udostępnianie danych, anulowanie dzwoniącego, terminy itp.

Kontekst jest tak przydatny, że wiele bibliotek w ekosystemie Go używa. Znajdziesz je również w aplikacjach, które wchodzą w interakcje ze zdalnymi serwerami, bazami danych, połączeniami API i innymi.

W tym artykule zapewniamy początkowe wprowadzenie do pakietu kontekstowego w Go i sposób korzystania z kontekstu w różnych przypadkach użycia.

Kontekst według wartości

Jednym z głównych przypadków użycia kontekstów w GO jest udostępnianie danych lub użycie wartości złożonych z żądania. Pakiet kontekstowy Golang zapewnia funkcję Wavelue, która umożliwia udostępnianie danych.

Składnia funkcji jest jak pokazana:

FUNC withValue (kontekst nadrzędny, klucz, interfejs val ) kontekst

Funkcja przyjmuje kontekst, klucz i wartość jako parametry. Następnie funkcja utworzy nowy kontekst w oparciu o dostarczony nadrzędny i doda określoną wartość do klawisza SET.

Pomyśl o tym jak o kontekście wewnętrznym z typem pary wartości kluczowej w środku. Następnie możesz pobrać lub pobierać wartości z typu.

Rozważ poniższy przykład, który ilustruje, jak korzystać z funkcji withValue i pobierać z niej wartości.

Pakiet Main
importować „fmt”
importować „kontekst”
funcMain ()
ctx: = kontekst.Tło()
ctx = addValues ​​(CTX)
ROTRIVERITEVALUE (CTX)

Funcaddvalues ​​(kontekst CTX.Kontekst) kontekst.Kontekst
kontekst powrotu.WithValue (CTX, „klucz”, „wartość”)

FuncreTeveValue (kontekst CTX.Kontekst)
wartość: = CTX.Wartość („Klucz”)
fmt.Println (wartość)

Skoncentruj się na głównej funkcji powyższego kodu. Zaczynamy od utworzenia nowego obiektu kontekstowego, CTX, z kontekstem.Funkcja tła ().

Funkcja tła zwróci następnie pusty kontekst inny niż zerowy bez anulowania, bez wartości i bez terminów.

Funkcja tła służy jako inicjalizacja przychodzących żądań kontekstowych.

Wartości ustawione na kontekście

Drugą częścią funkcji jest funkcja addValues ​​(). W tym przykładzie przyjmujemy nowy kontekst i wiążymy go z istniejącym kontekstem. Nowy kontekst ma klucz do dodania do kontekstu.

Zauważ, że funkcja withValue zwraca kopię kontekstu nadrzędnego i nie modyfikuje istniejącego kontekstu.

Kontekst odzyskuj wartości

Drugą częścią programu jest funkcja odzyskiwaniaValue (). W takim przypadku przyjmujemy strukturę kontekstową i pobieramy wartości powiązane z określonym kluczem.

Jeśli klucz istnieje w kontekście, funkcja powinna zwrócić powiązaną wartość.

Jeśli klucz nie istnieje, funkcja powinna zwrócić zero. Możemy zaimplementować logikę warunkową, aby sprawdzić, czy wartość zwrócona jest zerowa i zwrócić błąd, jeśli jest to prawda.

Kontekst z limitą limitu czasu

Innym powszechnym przypadkiem użycia kontekstów jest obsługa limitu czasu. Na przykład może być konieczne zdefiniowanie limitu czasu w niektórych aplikacjach, jeśli określone działanie nie jest wykonywane. Jest to niezwykle proste do wdrożenia za pomocą funkcji z czasem z pakietu kontekstowego. Przyjrzyjmy się, jak możemy wdrożyć limit czasu za pomocą pakietu kontekstowego.

Pakiet Main
import (
"kontekst"
„FMT”
"czas"
)
funcMain ()
CTX, Anuluj: = kontekst.Z czasem (kontekst.Tło (), 5*czas.Drugi)
Defer Anuluj ()
ctx = addValues ​​(CTX)
Idź do pobierania wartości (CTX)
wybierać
sprawa<-ctx.Done():
fmt.Println („zajęło zbyt długo!")

czas.Sen (5 * czas.Drugi)

Funcaddvalues ​​(kontekst CTX.Kontekst) kontekst.Kontekst
kontekst powrotu.WithValue (CTX, „klucz”, „wartość”)

FunCretrieveValues ​​(kontekst CTX.Kontekst)
Do
wybierać
sprawa<-ctx.Done():
fmt.Println („limit czasu”)
powrót
domyślny:
wartość: = CTX.Wartość („Klucz”)
fmt.Println (wartość)

czas.Sen (1 * czas.Drugi)

W tym przykładzie definiujemy funkcję anulowania za pomocą kontekstu.Z funkcją czasową. Następnie możemy ręcznie uruchomić funkcję Anuluj.

Po osiągnięciu wartości limitu czasu funkcja anulowania jest wywoływana i uruchamia określoną logikę.

W naszej funkcji wartości odzyskiwania stale pobieramy wartość za pomocą określonego klucza za pomocą pętli dla. Sprawdzamy również, czy wyczerpany kanał z głównego kontekstu wciąż żyje. Jeśli limit czasu nie przekroczy, kontekst nadrzędny będzie nadal otwarty, ale po osiągnięciu limitu czasu kontekst zostanie anulowany.

W naszym przykładzie funkcja będzie działać co 1 sekundę przed osiągnięciem limitu czasu. Przykładem jest to, jak pokazano:

wartość
wartość
wartość
wartość
wartość
Zbyt długo!
Koniec czasu

Wniosek

To był krótki i fundamentalny samouczek omawiający konteksty i sposób korzystania z nich w programach GO. Możesz sprawdzić dokumentację, aby dowiedzieć się więcej o kontekstach GO.