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