खोज…
वाक्य - विन्यास
- प्रकार रद्द करें फ़ंक ()
- func Background () संदर्भ
- func TODO () प्रसंग
- func WithCancel (मूल संदर्भ) (ctx संदर्भ, रद्द करें रद्द करें)
- func WithDeadline (जनक संदर्भ, समय सीमा। समय) (संदर्भ, रद्द करें रद्द करें)
- func WithTimeout (माता-पिता का प्रसंग, टाइमआउट समय। अवधि) (संदर्भ, रद्द करें)
- func WithValue (मूल संदर्भ, मुख्य इंटरफ़ेस {}, वेल इंटरफ़ेस {})
टिप्पणियों
context
पैकेज (गो 1.7 में) या golang.org/x/net/context
पैकेज (प्री 1.7) संदर्भ बनाने के लिए एक इंटरफ़ेस है, जिसका उपयोग एपीआई सीमाओं के बीच और सेवाओं के बीच, स्कोप किए गए मूल्यों और समय-सीमा के अनुरोधों को करने के लिए किया जा सकता है। उक्त इंटरफ़ेस का एक सरल कार्यान्वयन के रूप में।
एक तरफ: "संदर्भ" शब्द का उपयोग पूरे पेड़, या पेड़ में अलग-अलग पत्तियों को संदर्भित करने के लिए किया जाता है, जैसे। वास्तविक context.Context
। context.Context
मूल्य।
उच्च स्तर पर, एक संदर्भ एक पेड़ है। नए पत्तों को पेड़ में तब context.Context
जाता है जब उनका निर्माण किया जाता है (एक context.Context
एक माता-पिता के मूल्य के साथ context.Context
), और पत्तियों को पेड़ से कभी नहीं हटाया जाता है। किसी भी संदर्भ में इसके ऊपर के सभी मानों तक पहुंच होती है (डेटा एक्सेस केवल ऊपर की ओर बहती है), और यदि कोई संदर्भ रद्द हो जाता है तो उसके बच्चों को भी रद्द कर दिया जाता है (निरस्तीकरण के संकेत नीचे की ओर प्रचारित होते हैं)। रद्द संकेत एक फ़ंक्शन के माध्यम से कार्यान्वित किया जाता है जो एक चैनल लौटाता है जो संदर्भ रद्द होने पर बंद (पठनीय) होगा; यह पाइपलाइन और रद्दीकरण समरूपता पैटर्न या टाइमआउट को लागू करने के लिए एक बहुत ही कुशल तरीका बनाता है।
कन्वेंशन द्वारा, एक संदर्भ लेने वाले कार्यों में पहला तर्क ctx context.Context
। ctx context.Context
। हालांकि यह सिर्फ एक कन्वेंशन है, यह एक है जिसका पालन किया जाना चाहिए क्योंकि कई स्थिर विश्लेषण उपकरण विशेष रूप से इस तर्क की तलाश करते हैं। चूंकि प्रसंग एक इंटरफ़ेस है, इसलिए मौजूदा संदर्भ-समान डेटा (मान जो किसी अनुरोध कॉल श्रृंखला में पूरे समय के लिए पास हो जाते हैं) को सामान्य गो संदर्भ में बदलना संभव है और कुछ तरीकों को लागू करके उन्हें पीछे की ओर संगत तरीके से उपयोग करें। इसके अलावा, संदर्भ समवर्ती पहुंच के लिए सुरक्षित हैं ताकि आप उन्हें बिना किसी डर के कई गोरोइटिन (चाहे वे समानांतर थ्रेड पर या समवर्ती कोरआउट के रूप में चल रहे हों) से उपयोग कर सकें।
आगे की पढाई
प्रसंग वृक्ष एक निर्देशित ग्राफ के रूप में दर्शाया गया है
एक साधारण संदर्भ ट्री (जिसमें कुछ सामान्य मान होते हैं जिन्हें अनुरोधित किया जा सकता है और एक संदर्भ में शामिल किया जा सकता है) निम्न जैसे गो कोड से निर्मित:
// Pseudo-Go
ctx := context.WithValue(
context.WithDeadline(
context.WithValue(context.Background(), sidKey, sid),
time.Now().Add(30 * time.Minute),
),
ridKey, rid,
)
trCtx := trace.NewContext(ctx, tr)
logCtx := myRequestLogging.NewContext(ctx, myRequestLogging.NewLogger())
एक पेड़ है जिसे एक निर्देशित ग्राफ के रूप में दर्शाया जा सकता है जो इस तरह दिखता है:
प्रत्येक बच्चे के संदर्भ में उसके माता-पिता संदर्भों के मूल्यों तक पहुंच होती है, इसलिए डेटा का उपयोग पेड़ में ऊपर की ओर बहता है (काले किनारों द्वारा दर्शाया गया है)। दूसरी ओर रद्द करने के संकेत पेड़ की यात्रा करते हैं (यदि एक संदर्भ रद्द किया जाता है, तो उसके सभी बच्चे भी रद्द हो जाते हैं)। निरस्तीकरण संकेत प्रवाह ग्रे किनारों द्वारा दर्शाया गया है।
काम को रद्द करने के लिए एक संदर्भ का उपयोग करना
एक फ़ंक्शन को टाइमआउट (या रद्द फ़ंक्शन के साथ) में एक लंबे समय तक चलने वाले फ़ंक्शन के साथ पास करने का उपयोग उस फ़ंक्शन को रद्द करने के लिए किया जा सकता है:
ctx, _ := context.WithTimeout(context.Background(), 200*time.Millisecond)
for {
select {
case <-ctx.Done():
return ctx.Err()
default:
// Do an iteration of some long running work here!
}
}