Konteksts ir viena no svarīgākajām Go funkcijām, kas nodrošina vienlaicību. Programmā Go “konteksts” attiecas uz pakotni, kas nodrošina funkcionalitāti pieprasījuma tvēruma vērtībām un atcelšanas signāliem pāri API robežām.
Kontekstu pakotne darbojas vienlaikus ar Go paralēluma modeli, kura pamatā ir gorutīnu jēdziens. Goroutines ir viegls izpildes pavediens, ko varat izveidot un efektīvi pārvaldīt, atvieglojot vienlaicīgu programmu izveidi programmā Go.
Konteksta pakotne
Konteksta pakotne nodrošina funkcionalitāti ilgstošas funkciju vai visu zvanu ķēdes atcelšanai. Pakotne palīdz arī saglabāt pieprasījuma tvēruma vērtības, lai piekļūtu jebkurā vietā zvanu ķēdē. Šī funkcija ir ērta, strādājot ar API vai mikropakalpojumi, kur pieprasījumi var ietvert vairākus funkciju izsaukumus, un jūs vēlaties tos atcelt vai pievienot tiem noteiktas vērtības.
Tālāk ir norādīts, kā savā ierīcē varat importēt konteksta pakotni Iet uz programmām.
imports"konteksts"
Konteksta funkcijas ņem vērā Konteksts konteksta pakotnes struct tips. Parasti jums vajadzētu izmantot ctx kā instances mainīgā nosaukums.
funcoperācijas(ctx konteksts. konteksts) {
}
Funkcijas var atgriezt konteksta struktūras veidu citām funkcijām un operācijām.
funcoperācijas(ctx konteksts. konteksts)kontekstā.Konteksts {
}
Varat izveidot jaunu kontekstu, izmantojot DARĪT konteksta pakotnes funkcija. Funkcija TODO rada jaunu kontekstu ar vērtību kontekstā. Gatavs (), kanāls, kas tiks slēgts pēc konteksta atcelšanas. Tas ir jāizmanto kā vietturis, ja jums ir nepieciešams konteksts, bet neviens vecāks konteksts nav piemērots.
imports"konteksts"
funcgalvenais() {
ctx := konteksts. DARĪT()
}
Alternatīvi, Fons funkcija rada jaunu kontekstu bez vērtības un tukšu Done kanālu.
ctx := konteksts. Fons ()
Funkcija Fona ir jāizmanto kā konteksta koka sakne.
Konteksts ar vērtībām
Konteksta pakotne nodrošina vērtību un atcelšanas signālu izplatīšanas funkcionalitāti. Varat izmantot vērtības informācijai, sākot no pieprasījuma tvēruma datiem līdz atcelšanas signāliem un termiņiem.
Kontekstu pakotne arī ļauj izveidot bērnu kontekstu, kas mantots no vecāku kontekstiem, tādējādi nodrošinot efektīvu darbību vērtību un atcelšanas signālu apstrāde visā programmā, jo kontekstu var nodot caur vairākiem funkcijas.
Šeit ir piemērs konteksta pārsūtīšanai caur funkcijām, izmantojot konteksta pakotni.
imports (
"konteksts"
)funcvērtīgsKonteksts(ctx konteksts. konteksts)kontekstā.Konteksts {
atgriezties kontekstā. WithValue (ctx, "parole", "hfouneqcelkwfu")
}
funcsaņemtContextData(ctx konteksts. konteksts)jebkura {
passKey := ctx. Vērtība("parole")
atgriezties passKey
}
The vērtīgsKonteksts funkcija izmanto konteksta gadījumu un atgriež konteksta instanci tālāk norādītajai funkcijai. Konteksta gadījums ir vērtība, kas izveidota ar Ar vērtību metodi. Metode WithValue konteksta gadījumu ņem no funkcijas un atslēgas-vērtības pāra.
Lai izgūtu datus no konteksta, jums būs jāizveido jauns konteksts ar DARĪT vai Fons funkciju un nodod kontekstu funkcijai (šajā gadījumā valueContext) un saņemiet kontekstu ar saņemtContextData funkciju.
funcgalvenais() {
ctx := konteksts. Fons ()
ctx = vērtīgsContext (ctx)
fmt. Println (receiveContextData (ctx))
}
Mainīgais ctx ir konteksta gadījums no funkcijas Fona. Funkcija valueContext uzņem ctx mainīgo un atgriež kontekstu ar vērtību, ko uztver funkcija ReceiveContextData, un atgriež vērtību no atslēgas un vērtības pāra.
Konteksta noildzes un termiņi
The kontekstā pakotne nodrošina darbību taimautu un termiņu iestatīšanas funkcionalitāti. Noildzes un termiņu iestatīšana ir noderīga darbībām, kurām nepieciešams panākt.
Taimauts ir darbības ilgums. Varat iestatīt darbības taimautu 4 sekundes; pēc tam konteksts pieprasījumu atceļ.
No otras puses, termiņš nosaka absolūto punktu, kurā darbība ir jāatceļ.
Jūs varat izmantot Ar taimautu metode konteksta taimauta iestatīšanai. Lūk, kā varat iestatīt 2 sekunžu taimautu.
funcgalvenais() {
ctx, atcelt := kontekstu. WithTimeout (konteksts. Fons (), 2 * laiks. Otrkārt)
atlikt atcelt ()
// kāda darbība
}
The galvenais funkcija izveido kontekstu ar divu sekunžu taimautu. Funkcija WithTimeout atgriež atcelšanas funkciju, kuras atcelšanu varat atlikt, izejot no galvenās funkcijas.
Jūs varat deklarēt termiņus ar WithDeadline metodi. WithDeadline metodei tiek izmantots konteksta gadījums un termiņa laiks.
funcdari kaut ko(ctx konteksts. konteksts) {
deadlineTime := laiks. Tagad().Pievienot(1500 * laiks. Milisekunde)
ctx, ctxCancel := konteksts. WithDeadline (ctx, deadlineTime)
atlikt ctxCancel()// kāda darbība
ctxCancel()
}
The dari kaut ko funkcija aizņem kontekstu, un termiņšLaiks mainīgais ir laiks pirms kontekstā nodošanas laiks. The ctx mainīgais ir konteksts ar termiņu.
The ctxAtcelt mainīgais atceļ kontekstu, kad konteksts pārsniedz tā termiņu.
Paraugprakse kontekstu izmantošanai Go
Neizmantojiet kontekstus kā globālos mainīgos. Izmantojot kontekstus kā globālos mainīgos, var rasties neparedzētas koda darbības un grūti izsekojamas kļūdas, un konteksts tiek izmantots taupīgi, lai samazinātu koda sarežģītību.
Visbeidzot, izmantojiet kontekstus kā signālus, nevis garantijas. Konteksta atcelšana negarantē, ka tiks pārtraukta visu gorutīnu darbība. tas ir tikai signāls, un gorutīnas ir kontekstu agnostiķi.