"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > **स्लाइस इनिशियलाइज़ेशन के लिए जेनेरिक का उपयोग करते समय इंटरफ़ेस-कार्यान्वयनकर्ता संबंधों को कैसे संरक्षित करें?**

**स्लाइस इनिशियलाइज़ेशन के लिए जेनेरिक का उपयोग करते समय इंटरफ़ेस-कार्यान्वयनकर्ता संबंधों को कैसे संरक्षित करें?**

2024-11-05 को प्रकाशित
ब्राउज़ करें:931

**How to Preserve Interface-Implementor Relationships When Using Generics in Go for Slice Initialization?**

गोलंग जेनेरिक में इंटरफेस/कार्यान्वयन एक साथता

प्रारंभिक मूल्यों के साथ एक स्लाइस को भरने के लिए एक सामान्य फ़ंक्शन बनाने के कार्य पर विचार करें। हालांकि यह सीधा लग सकता है, इंटरफ़ेस के स्लाइस का उपयोग करने और फ़ंक्शन के भीतर ठोस प्रकार निर्दिष्ट करने का प्रयास करते समय चुनौतियाँ उत्पन्न होती हैं।

गो 1.18 में, जेनेरिक फ़ंक्शन फिल के भीतर किसी भी प्रकार के रूप में एक्स और वाई दोनों को बाधित करने से नुकसान होता है इंटरफ़ेस और इसके कार्यान्वयनकर्ताओं के बीच किसी भी संबंध का। यह फ़ंक्शन के भीतर स्लाइस करने के लिए Y के उदाहरणों के असाइनमेंट को रोकता है। ](स्लाइस []एक्स) { मेरे लिए := रेंज स्लाइस { स्लाइस[i] = कोई(*नया(Y)).(X) } }

हालाँकि, यह दृष्टिकोण तब घबरा जाता है जब Y, X को लागू नहीं करता है। इसके अतिरिक्त, Y के लिए सूचक प्रकार का उपयोग करने से आधार प्रकार और शून्य बेसलाइन मान के बारे में जानकारी का नुकसान होता है।

func Fill[X, Y any](slice []X) {
    for i := range slice {
        slice[i] = any(*new(Y)).(X)
    }
}

func main() { xs := बनाओ([]सिंक.लॉकर, 10) भरें(xs, func() sync.Locker {वापसी &sync.Mutex{} }) } func भरें[X कोई भी](स्लाइस []X, f func() X) { मेरे लिए := रेंज स्लाइस { स्लाइस[i] = f() } }

यह दृष्टिकोण कंस्ट्रक्टर फ़ंक्शन द्वारा बनाए गए आरंभिक मानों के साथ स्लाइस को प्रभावी ढंग से भरता है, जिससे समस्या का अधिक मजबूत और लचीला समाधान मिलता है।

नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3