विभिन्न प्रकार के स्लाइसों को परिवर्तित करने में असमर्थता, जैसा कि प्रदान किए गए कोड स्निपेट द्वारा उदाहरण दिया गया है, विशिष्ट प्रकार के रूपांतरण के कारण है गो विनिर्देश में उल्लिखित नियम। ये नियम तब नियंत्रित होते हैं जब एक गैर-स्थिर मान को एक विशिष्ट प्रकार में परिवर्तित किया जा सकता है।
कोई भी रूपांतरण नियम उस मामले पर लागू नहीं होता है जहां आप बार के एक स्लाइस को फू के एक स्लाइस में बदलने का प्रयास करते हैं। जबकि फू और बार के अंतर्निहित प्रकार समान हैं, उनके संबंधित स्लाइस के अंतर्निहित प्रकार समान नहीं हैं। इसके परिणामस्वरूप []Bar प्रकार के एक चर के लिए []Foo मान निर्दिष्ट करने में असमर्थता होती है।
अंतर्निहित प्रकारों को समझना
यह ध्यान रखना महत्वपूर्ण है कि अंतर्निहित किसी वेरिएबल का प्रकार आवश्यक रूप से वेरिएबल के प्रकार के समान नहीं होता है। स्लाइस के मामले में, तत्व प्रकार अंतर्निहित प्रकार है। इस प्रकार, जबकि फू और बार में एक ही अंतर्निहित प्रकार (फू) है, []फू और []बार में नहीं है।
एक व्यावहारिक समाधान
इस समस्या का समाधान करने के लिए , आप एक मध्यवर्ती प्रकार बना सकते हैं जो बार को फू के रूप में उपनाम देता है। यह दृष्टिकोण काम करता है क्योंकि स्लाइस का तत्व प्रकार वही रहता है। उदाहरण के लिए:
type Foo struct { A int }
type Bar Foo
type Foos []Foo
type Bars Foos
func main() {
foos := []Foo{Foo{1}, Foo{2}}
bars := Bars(foos)
fmt.Println(bars)
}
आउटपुट:
[{1} {2}]
यह समाधान समान अंतर्निहित तत्व प्रकार के साथ स्लाइस बनाता है, जो उनके बीच रूपांतरण की अनुमति देता है।
असुरक्षित विचार
चेतावनी के एक नोट के रूप में, जबकि तकनीकी रूप से इसका एक टुकड़ा "देखना" संभव है असुरक्षित संचालन का उपयोग करते हुए बार के एक टुकड़े के रूप में फू, यह दृष्टिकोण प्रकार की सुरक्षा को दरकिनार करता है। सुरक्षा और विश्वसनीयता के लिए ऊपर बताए गए प्रकार के अलियासिंग दृष्टिकोण का उपयोग करने की अनुशंसा की जाती है।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3