प्रसंग गो में महत्वपूर्ण विशेषताओं में से एक है जो संगामिति को सक्षम करता है। गो में, "संदर्भ" एक पैकेज को संदर्भित करता है जो एपीआई सीमाओं के भीतर अनुरोध-दायरे वाले मूल्यों और रद्दीकरण संकेतों के लिए कार्यक्षमता प्रदान करता है।
गोरोइन की अवधारणा के आधार पर संदर्भ पैकेज गो के समवर्ती मॉडल के साथ एक साथ काम करता है। गोरोइन निष्पादन के हल्के धागे हैं जिन्हें आप कुशलता से बना और प्रबंधित कर सकते हैं, जिससे गो में समवर्ती कार्यक्रम बनाना आसान हो जाता है।
प्रसंग पैकेज
संदर्भ पैकेज लंबे समय तक चलने वाले कार्यों या संपूर्ण कॉल श्रृंखलाओं को रद्द करने के लिए कार्यक्षमता प्रदान करता है। पैकेज कॉल श्रृंखला के भीतर कहीं भी पहुंच के लिए अनुरोध-दायरे वाले मानों को संग्रहीत करने में भी मदद करता है। साथ काम करते समय यह सुविधा आसान है शहद की मक्खी या माइक्रोसर्विसेज, जहां अनुरोधों में कई फ़ंक्शन कॉल शामिल हो सकते हैं और आप उन्हें रद्द करना चाहते हैं या उनके लिए विशिष्ट मान संलग्न करना चाहते हैं।
यहां बताया गया है कि आप अपने संदर्भ पैकेज को कैसे आयात कर सकते हैं जाओ कार्यक्रम.
आयात"प्रसंग"
प्रसंग कार्य में लेते हैं प्रसंग संदर्भ पैकेज का संरचना प्रकार। परंपरागत रूप से, आपको उपयोग करना चाहिए सीटीएक्स उदाहरण चर के नाम के रूप में।
समारोहसंचालन(सीटीएक्स संदर्भ। प्रसंग) {
}
कार्य अन्य कार्यों और संचालन के लिए संदर्भ संरचना प्रकार वापस कर सकते हैं।
समारोहसंचालन(सीटीएक्स संदर्भ। प्रसंग)प्रसंग.प्रसंग {
}
आप के साथ एक नया संदर्भ बना सकते हैं ऐसा करने के लिए संदर्भ पैकेज का कार्य। TODO फ़ंक्शन के मान के साथ एक नया संदर्भ बनाता है प्रसंग। पूर्ण(), एक चैनल जो संदर्भ रद्द करने पर बंद हो जाएगा। जब आपको संदर्भ की आवश्यकता हो तो आपको इसे प्लेसहोल्डर के रूप में उपयोग करना चाहिए लेकिन कोई मूल संदर्भ उपयुक्त नहीं है।
आयात"प्रसंग"
समारोहमुख्य() {
सीटीएक्स: = संदर्भ। ऐसा करने के लिए()
}
वैकल्पिक रूप से, पृष्ठभूमि फ़ंक्शन बिना किसी मूल्य के एक नया संदर्भ बनाता है और एक खाली हो गया चैनल बनाता है।
सीटीएक्स: = संदर्भ। पृष्ठभूमि()
आपको पृष्ठभूमि फ़ंक्शन को संदर्भ पेड़ की जड़ के रूप में उपयोग करना चाहिए।
मूल्यों के साथ प्रसंग
संदर्भ पैकेज मूल्यों और रद्दीकरण संकेतों के प्रचार के लिए कार्यक्षमता प्रदान करता है। आप अनुरोध-दायरे वाले डेटा से लेकर रद्द करने के संकेतों और समय सीमा तक की जानकारी के लिए मानों का उपयोग कर सकते हैं।
संदर्भ पैकेज माता-पिता संदर्भों से विरासत में प्राप्त बाल संदर्भों के निर्माण की भी अनुमति देता है, जो कुशल होने की अनुमति देता है एक कार्यक्रम के दौरान मूल्यों और रद्दीकरण संकेतों को संभालना क्योंकि आप संदर्भ को एकाधिक के माध्यम से पारित कर सकते हैं कार्य करता है।
यहां संदर्भ पैकेज के साथ कार्यों के माध्यम से संदर्भ पारित करने का एक उदाहरण दिया गया है।
आयात (
"प्रसंग"
)समारोहमूल्यवान संदर्भ(सीटीएक्स संदर्भ। प्रसंग)प्रसंग.प्रसंग {
वापस करना प्रसंग। मूल्य के साथ (सीटीएक्स, "पास-कुंजी", "hfouneqcelkwfu")
}
समारोहप्राप्त कॉन्टेक्स्टडेटा(सीटीएक्स संदर्भ। प्रसंग)कोई {
पासकी: = सीटीएक्स। कीमत("पास-कुंजी")
वापस करना सर्व-कुंजी
}
मूल्यवान संदर्भ फ़ंक्शन एक संदर्भ उदाहरण लेता है और निम्नलिखित फ़ंक्शन के लिए एक संदर्भ उदाहरण देता है। संदर्भ उदाहरण के साथ बनाया गया मान है मूल्य के साथ तरीका। WithValue विधि फ़ंक्शन और एक कुंजी-मूल्य जोड़ी से संदर्भ उदाहरण लेती है।
संदर्भ से डेटा पुनर्प्राप्त करने के लिए, आपको इसके साथ एक नया संदर्भ बनाना होगा ऐसा करने के लिए या पृष्ठभूमि कार्य करें और संदर्भ को फ़ंक्शन में पास करें (इस मामले में, valueContext) और इसके साथ संदर्भ प्राप्त करें प्राप्त कॉन्टेक्स्टडेटा समारोह।
समारोहमुख्य() {
सीटीएक्स: = संदर्भ। पृष्ठभूमि()
सीटीएक्स = मूल्यवान कॉन्टेक्स्ट (सीटीएक्स)
fmt. Println (प्राप्त कॉन्टेक्स्टडेटा (सीटीएक्स))
}
Ctx चर बैकग्राउंड फ़ंक्शन का संदर्भ उदाहरण है। वैल्युएबलकॉन्टेक्स्ट फ़ंक्शन ctx चर लेता है और संदर्भ को उस मान के साथ लौटाता है जिसे getContextData फ़ंक्शन लेता है और की-वैल्यू पेयर से मान लौटाता है।
प्रसंग समयबाह्य और समय सीमा
प्रसंग पैकेज संचालन में टाइमआउट और समय सीमा निर्धारित करने के लिए कार्यक्षमता प्रदान करता है। टाइमआउट और डेडलाइन सेट करना उन ऑपरेशंस के लिए मददगार होता है जिन्हें पकड़ने की जरूरत होती है।
टाइमआउट किसी ऑपरेशन में लगने वाले समय की अवधि है। आप एक ऑपरेशन के लिए 4 सेकंड का समय निर्धारित कर सकते हैं; उसके बाद, संदर्भ अनुरोध को रद्द कर देता है।
दूसरी ओर, एक समय सीमा उस निरपेक्ष बिंदु को परिभाषित करती है जहां एक ऑपरेशन को रद्द करना चाहिए।
आप उपयोग कर सकते हैं टाइमआउट के साथ संदर्भ टाइमआउट सेट करने की विधि। यहां बताया गया है कि आप 2-सेकंड टाइमआउट कैसे सेट कर सकते हैं।
समारोहमुख्य() {
सीटीएक्स, रद्द करें: = संदर्भ। टाइमआउट के साथ (संदर्भ। पृष्ठभूमि(), 2 * समय। दूसरा)
आस्थगित करें रद्द करना()
// कुछ ऑपरेशन
}
मुख्य फ़ंक्शन दो सेकंड के टाइमआउट के साथ एक संदर्भ बनाता है। WithTimeout फ़ंक्शन एक रद्द फ़ंक्शन लौटाता है जिसे आप मुख्य फ़ंक्शन के बाहर निकलने पर रद्द करने के लिए स्थगित कर सकते हैं।
आप के साथ समय सीमा घोषित कर सकते हैं समय सीमा के साथ तरीका। विथडेडलाइन विधि एक संदर्भ उदाहरण और एक समय सीमा समय लेती है।
समारोहकुछ करो(सीटीएक्स संदर्भ। प्रसंग) {
समय सीमा: = समय। अब ()। जोड़ें (1500 * समय। मिलीसेकंड)
सीटीएक्स, सीटीएक्स रद्द करें: = संदर्भ। डेडलाइन के साथ (ctx, डेडलाइनटाइम)
आस्थगित करें सीटीएक्सरद्द करें ()// कुछ ऑपरेशन
सीटीएक्सरद्द करें ()
}
कुछ करो function एक संदर्भ में लेता है, और समय सीमा चर से पहले का समय है प्रसंग अंतिम तारीख। सीटीएक्स चर एक समय सीमा के साथ संदर्भ है।
ctxरद्द करें चर संदर्भ को रद्द कर देता है जब संदर्भ अपनी समय सीमा से अधिक हो जाता है।
गो में प्रसंगों का उपयोग करने के लिए सर्वोत्तम अभ्यास
संदर्भों को वैश्विक चर के रूप में उपयोग करने से बचें। संदर्भों को वैश्विक चर के रूप में उपयोग करने से अप्रत्याशित कोड व्यवहार और मुश्किल-से-ट्रेस त्रुटियां हो सकती हैं, और कोड जटिलता को कम करने के लिए संदर्भ का संयम से उपयोग करें।
अंत में, संदर्भों को सिग्नल के रूप में उपयोग करें, गारंटी नहीं। किसी संदर्भ को रद्द करना इस बात की गारंटी नहीं देता है कि सभी goroutines चलना बंद कर देंगे; यह केवल एक संकेत है, और goroutines संदर्भों के अज्ञेयवादी हैं।