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

## गो में कंक्रीट प्रकार के साथ इंटरफेस के स्लाइस को कैसे प्रारंभ करें?

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

## How to Initialize Slices of Interfaces with Concrete Types in Go?

गो में इंटरफेस और कंक्रीट प्रकारों के साथ जेनेरिक आरंभीकरण

गो में सामान्य फ़ंक्शन लिखते समय, कंक्रीट प्रकारों को स्वीकार करना भी फायदेमंद हो सकता है। हालाँकि, उन विशिष्ट प्रकारों के नए उदाहरणों के साथ इंटरफेस के स्लाइस को आरंभ करने का प्रयास करते समय यह एक चुनौती पैदा करता है। एक स्लाइस एलिमेंट प्रकार (X) के लिए और दूसरा कंक्रीट प्रकार (Y) के लिए इंस्टेंटियेट करने के लिए। हालाँकि, X प्रकार के तत्व को Y का एक उदाहरण निर्दिष्ट करने का प्रयास करते समय यह दृष्टिकोण विफल हो जाता है।

func fill[X, Y Any](slice []X){ मेरे लिए := रेंज स्लाइस { स्लाइस[i] = नया(Y) // काम नहीं! } }

यह समस्या इसलिए उत्पन्न होती है क्योंकि कंपाइलर इंटरफ़ेस X और इसके कार्यान्वयन Y के बीच संबंध खो देता है। ]इसे संबोधित करने के लिए, कोई फ़ंक्शन के भीतर एक स्पष्ट कास्टिंग ऑपरेशन नियोजित कर सकता है:
func Fill[X, Y any](slice []X){
   for i := range slice {
      slice[i] = new(Y) // not work!
   }
}
func fill[X, Y कोई भी](स्लाइस []X) { मेरे लिए := रेंज स्लाइस { स्लाइस[i] = कोई(*नया(Y)).(X) } }

हालाँकि, यदि Y, X को लागू नहीं करता है तो यह दृष्टिकोण घबराहट पैदा करता है, जो ऐसे परिदृश्यों में होता है जैसे कि sync.Locker को *sync.Mutex (पॉइंटर प्रकार) असाइन करने का प्रयास करना।

एक कंस्ट्रक्टर फ़ंक्शन का उपयोग करना

एक अधिक मजबूत और प्रकार-सुरक्षित समाधान में एक कंस्ट्रक्टर फ़ंक्शन का उपयोग शामिल है:
func Fill[X, Y any](slice []X){
   for i := range slice {
      slice[i] = new(Y) // not work!
   }
}
func fill[X Any](slice []X, f func() X ) { मेरे लिए := रेंज स्लाइस { स्लाइस[i] = f() } }

यह फ़ंक्शन एक कंस्ट्रक्टर फ़ंक्शन को स्वीकार करता है जो निर्दिष्ट प्रकार का एक नया उदाहरण लौटाता है। यह ठोस प्रकार के उदाहरणों के साथ स्लाइस के संक्षिप्त और सुरक्षित आरंभीकरण की अनुमति देता है। उस new(Y) का परिणाम शून्य मान होगा। इसे रोकने के लिए, कोई सही पॉइंटर मान वापस करने के लिए कंस्ट्रक्टर फ़ंक्शन को समायोजित कर सकता है, जैसे कि func() X { return &sync.Mutex{} }।

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

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

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

Copyright© 2022 湘ICP备2022001581号-3