अनमर्शल में जेनेरिक उपयोग (गो 1.18)
गो 1.18 में जेनेरिक का उपयोग करते समय, जैसे कि विभिन्न प्रकार की रिपोर्ट रखने के लिए एक कंटेनर बनाना, प्रकार की बाधाएँ उत्पन्न हो सकती हैं। निम्नलिखित सेटअप पर विचार करें:
आपको रिटर्न प्रकारों पर प्रकार की बाधाओं के साथ चुनौतियों का सामना करना पड़ सकता है, जिससे टाइप दावे को समायोजित करने के लिए गेटबॉडी() फ़ंक्शन में "फ्रीटेक्स्ट सेमेन्टिक्स" हो सकता है।
चुनौतियां और समाधान
यह समस्या गो द्वारा संरचनाओं के लिए प्रकार के दावे का समर्थन नहीं करने और सामान्य प्रकारों के लिए पॉइंटर्स की अनुमति नहीं देने से उत्पन्न होती है। इसे संबोधित करने के लिए, आप एक इंटरफ़ेस बना सकते हैं जो लोकेशन आईडी, प्रदाता, रिपोर्ट प्रकार और बॉडी के लिए गेटर्स लागू करता है। हालाँकि, इस समाधान के लिए प्रकार की सुरक्षा का त्याग करना आवश्यक है।
एक सुरक्षित दृष्टिकोण में पैरामीट्रिक बहुरूपता को छोड़ना और JSON अनमर्शलिंग के दौरान विभेदक मूल्य के आधार पर एक ठोस स्विच स्टेटमेंट का उपयोग करना शामिल है। यह सुनिश्चित करता है कि प्रत्येक रिपोर्ट प्रकार के लिए सही ठोस प्रकार का उपयोग किया जाता है।
func unmarshalAny[T कोई भी](बाइट्स []बाइट) (*T, त्रुटि) { बाहर := नया(टी) यदि त्रुटि := json.Unmarshal(बाइट्स, आउट); त्रुटि != शून्य { वापसी शून्य, त्रुटि } बाहर लौटें, शून्य }हालाँकि यह फ़ंक्शन लचीलापन प्रदान करता है, यह ध्यान रखना आवश्यक है कि यदि इसका कार्यान्वयन न्यूनतम है, तो यह केवल अनमर्शलिंग लॉजिक को सीधे इनलाइन करने के समान कार्य करता है। इस प्रकार, इस फ़ंक्शन का उपयोग केवल तभी उचित है जब यह अतिरिक्त तर्क प्रस्तुत करता है।
संक्षेप में, ठोस प्रकारों और JSON अनमर्शलिंग के साथ काम करते समय जेनेरिक की आवश्यकता पर ध्यान से विचार करें। जब आवश्यक हो तो प्रकार की सुरक्षा से समझौता किए बिना स्विच-आधारित समाधान का विकल्प चुनें, और अनावश्यक रूप से डुप्लिकेट कार्यक्षमता वाले सामान्य कार्यों को नियोजित करते समय सावधानी बरतें।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3