Az Önhöz hasonló olvasók támogatják a MUO-t. Amikor a webhelyünkön található linkek használatával vásárol, társult jutalékot kaphatunk. Olvass tovább.

A kontextus a Go egyik kritikus jellemzője, amely lehetővé teszi a párhuzamosságot. A Go alkalmazásban a „kontextus” egy olyan csomagra utal, amely az API határain átnyúló kérési hatókörű értékekhez és lemondási jelekhez nyújt funkcionalitást.

A kontextuscsomag egyidejűleg működik a Go párhuzamossági modelljével, amely a gorutinok koncepcióján alapul. A Goroutines könnyű végrehajtási szálak, amelyeket hatékonyan hozhat létre és kezelhet, megkönnyítve ezzel párhuzamos programok létrehozását a Go-ban.

A kontextus csomag

A környezeti csomag hosszú ideig futó függvények vagy teljes hívási láncok törlésére szolgál. A csomag segít a kérés-hatókörű értékek tárolásában is a hívási láncon belüli bárhol eléréshez. Ez a funkció hasznos, ha dolgozik vele API-k vagy mikroszolgáltatások, ahol a kérések több függvényhívásra is kiterjedhetnek, és törölni szeretné őket, vagy adott értékeket szeretne hozzájuk csatolni.

instagram viewer

Így importálhatja a környezeti csomagot a sajátjába Menj programok.

import"kontextus"

A kontextusfüggvények a Kontextus a környezeti csomag struct típusa. Hagyományosan érdemes használni ctx mint a példányváltozó neve.

functevékenységek(ctx kontextus. Kontextus) {
}

A függvények visszaadhatják a Context struktúra típust más függvényekhez és műveletekhez.

functevékenységek(ctx kontextus. Kontextus)kontextus.Kontextus {
}

Új kontextust hozhat létre a CSINÁLNI a kontextuscsomag funkciója. A TODO függvény új kontextust hoz létre az értékkel kontextus. Kész(), egy csatorna, amely bezárul a kontextus megszüntetésével. Használja helyőrzőként, ha kontextusra van szüksége, de nem megfelelő szülő kontextus.

import"kontextus"

funcfő-() {
ctx := kontextus. CSINÁLNI()
}

Alternatív megoldásként a Háttér függvény új kontextust hoz létre érték nélkül és egy üres Done csatornát.

ctx := kontextus. Háttér()

Használja a Háttér függvényt a környezetfa gyökereként.

Kontextus értékekkel

A környezeti csomag funkcionalitást biztosít az értékek és a törlési jelek terjesztéséhez. Az értékeket információkhoz használhatja, a kérési hatókörű adatoktól a törlési jelzésekig és a határidőkig.

A kontextuscsomag lehetővé teszi a szülői kontextusokból örökölt gyermek kontextus létrehozását is, ami lehetővé teszi a hatékony működést az értékek és a törlési jelek kezelése egy programon belül, mivel a kontextust több helyen is átadhatja funkciókat.

Íme egy példa a kontextus függvényeken keresztül történő átadására a kontextuscsomaggal.

import (
"kontextus"
)

funcértékesContext(ctx kontextus. Kontextus)kontextus.Kontextus {
Visszatérés kontextus. With Value (ctx, "jelszó", "hfouneqcelkwfu")
}

funcReceiveContextData(ctx kontextus. Kontextus)Bármi {
passKey := ctx. Érték("jelszó")
Visszatérés passKey
}

A értékesContext függvény egy kontextuspéldányt vesz fel, és egy kontextuspéldányt ad vissza a következő függvényhez. A kontextuspéldány egy érték, amelyet a With Value módszer. A WithValue metódus a kontextuspéldányt a függvényből és egy kulcs-érték párból veszi.

Az adatok kontextusból való lekéréséhez új kontextust kell létrehoznia a CSINÁLNI vagy Háttér függvényt, és adja át a kontextust a függvénynek (ebben az esetben a valueContext), és kapja meg a kontextust a ReceiveContextData funkció.

funcfő-() {
ctx := kontextus. Háttér()
ctx = értékesKontextus (ctx)
fmt. Println (ContextData fogadása (ctx))

}

A ctx változó a háttérfüggvény környezeti példánya. A valueContext függvény beveszi a ctx változót, és visszaadja a kontextust a ReceiveContextData függvény által felvett értékkel, és visszaadja a kulcs-érték pár értéket.

Kontextus Időtúllépések és határidők

A kontextus A csomag lehetővé teszi az időkorlátok és határidők beállítását a műveletekben. Az időkorlátok és határidők beállítása hasznos a felzárkózást igénylő műveleteknél.

Az időtúllépések a művelet időtartama. Beállíthat egy művelet időtúllépését 4 másodpercre; ezt követően a kontextus törli a kérést.

Másrészt a határidő meghatározza azt az abszolút pontot, ahol a műveletet meg kell szakítani.

Használhatja a Időtúllépéssel módszer a környezeti időtúllépés beállítására. Így állíthat be 2 másodperces időtúllépést.

funcfő-() {
ctx, cancel := kontextus. WithTimeout (kontextus. Háttér(), 2 * idő. Második)
elhalasztja megszünteti()

// valamilyen művelet
}

A fő- függvény kontextust hoz létre két másodperces időtúllépéssel. A WithTimeout függvény egy törlési függvényt ad vissza, amelyet a fő függvényből való kilépéskor elhalaszthat.

Határidőket nyilatkozni a Határidővel módszer. A WithDeadline metódus egy kontextuspéldányt és egy határidőt vesz igénybe.

funccsinálj valamit(ctx kontextus. Kontextus) {
deadlineTime := idő. Now().Add(1500 * idő. Miliszekundum)
ctx, ctxCancel := kontextus. WithDeadline (ctx, deadlineTime)
elhalasztja ctxCancel()

// valamilyen művelet

ctxCancel()
}

A csinálj valamit függvény kontextusba kerül, és a határidőTime változó az előtti idő kontextus határidő. A ctx változó a kontextus egy határidővel.

A ctxMégse változó törli a kontextust, ha a kontextus túllépi a határidőt.

Bevált gyakorlatok a kontextusok használatához a Go alkalmazásban

Kerülje a kontextusok globális változóként való használatát. A kontextusok globális változóként történő használata váratlan kódviselkedéshez és nehezen nyomon követhető hibákhoz vezethet, és takarékosan használja a környezetet a kód bonyolultságának csökkentése érdekében.

Végül a kontextusokat használja jelzésként, ne garanciaként. A kontextus törlése nem garantálja, hogy minden gorutin leáll; ez csupán egy jelzés, és a gorutinok nem ismerik az összefüggéseket.