2012-09-01 25 views
13

गोलांग पैकेज "नेट/http" हैंडलर पंजीकृत करने के लिए ग्लोबल वेरिएबल DefaultServeMux का उपयोग करता है। क्या यह एक अच्छा अभ्यास या यहां तक ​​कि एक गोलांग मुहावरे माना जाता है? क्या यह सब के बाद एक वैश्विक चर है?वैश्विक चर के "शुद्ध/http" के उपयोग को गोलांग में एक अच्छा अभ्यास माना जाता है?

दो मुख्य कारण का उपयोग नहीं कर रहे हैं वैश्विक चर AFAIK 1) है कि वे जटिलता के जोड़ सकते हैं और 2) समवर्ती कार्यक्रमों में समस्याग्रस्त हैं।

हो सकता है कि 1) इस मामले में महत्वपूर्ण माना जाता है क्योंकि डेवलपर DefaultServerMux उपयोग करने के लिए नहीं चुन सकते हैं नहीं है? 2 के बारे में क्या? वैश्विक चर हमेशा थ्रेड/goroutine जाओ में सुरक्षित हैं? फिर भी, मुझे आश्चर्य है कि इसका उपयोग गो की मानक लाइब्रेरी में किया जाता है। मैंने कभी भी अन्य भाषाओं/मानक पुस्तकालयों में इस तरह के अभ्यास को नहीं देखा है।

उत्तर

19

यह सब के बाद एक वैश्विक चर है?

हां। परिवर्तनीय defined रूट स्तर पर है, जो इसे पूरे पैकेज में वैश्विक बनाता है।

हालांकि, यह एक वैश्विक चर नहीं है जो net/http पैकेज की सभी समझदार जानकारी स्टोर करता है। यह केवल एक सुविधा की स्थापना के जो उपयोगकर्ता के लिए एक त्वरित प्रारंभ अवसर प्रदान करने net/http पैकेज की सामग्री का उपयोग करता है। इसका भी अर्थ है, यह बहुत जटिलता नहीं जोड़ता है।

क्या यह एक अच्छा अभ्यास या यहां तक ​​कि एक गोलांग मुहावरे माना जाता है?

आईएमओ, उपयोगकर्ता को पैकेज के उपयोग के साथ सहायता करने का अच्छा अभ्यास है। यदि आप पाते हैं कि आप अच्छी डिफ़ॉल्ट कॉन्फ़िगरेशन प्रदान करके उपयोगकर्ता को कुछ समय बचा सकते हैं, तो ऐसा करें।

लेकिन, आप सावधान जब आप चर निर्यात करने के बारे में कर रहे हैं होना चाहिए। उन्हें समवर्ती पहुंच के लिए तैयार किया जाना चाहिए। DefaultServeMux (या बेहतर, अंतर्निहित ServeMux), उदाहरण के लिए, using a mutex थ्रेड सुरक्षित होने के लिए है।

वैश्विक चर हमेशा थ्रेड/गोरौटाइन गो में सुरक्षित हैं?

सं उचित तुल्यकालन के बिना (म्युटेक्स, चैनल, ...), सब कुछ है कि समवर्ती पहुँचा जा सकता है समस्याग्रस्त है और सबसे निश्चित रूप से बिट और टुकड़े करने के लिए सब कुछ उड़ा देगा।

मैंने कभी अन्य भाषाओं/मानक पुस्तकालयों में ऐसा अभ्यास नहीं देखा है।

पायथन के logging मॉड्यूल, उदाहरण के लिए, रूट प्रवेश वस्तु है, जो एक लॉगिंग व्यवहार को अनुकूलित करने पर तरीकों कॉल कर सकते हैं पुनः प्राप्त करने के एक समारोह प्रदान करता है।इसे वैश्विक वस्तु के रूप में देखा जा सकता है, क्योंकि यह मॉड्यूल में उत्परिवर्तनीय और परिभाषित है।

1

globvar, इस मामले में, एनालॉग के रूप में के रूप में सुरक्षित और के रूप में अच्छा विकल्प उदाहरण के पैकेज में देखा जाता है "लॉग ऑन" है।

आईओओ, दावा 1 अस्पष्ट है क्योंकि यह प्राप्त हो सकता है और दावा 2 को बाधित किया जाता है: कभी-कभी/कहीं सही, अन्यथा गलत == सामान्य रूप से ऐसा नहीं होता है, भले ही इसका उपयोग किया जाए।

संबंधित मुद्दे

 संबंधित मुद्दे