गो पॉइंटर्स: रिसीवर और वैल्यू प्रकार
गो में, ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग और मेमोरी प्रबंधन को समझने के लिए पॉइंटर्स अपरिहार्य हैं। पॉइंटर्स के साथ काम करते समय, तरीकों में रिसीवर प्रकारों के बीच अंतर को समझना महत्वपूर्ण है।
आपके द्वारा प्रदान किया गया गो टूर उदाहरण इस अवधारणा को दर्शाता है:
type Vertex struct { X, Y float64 } func (v *Vertex) Abs() float64 { return math.Sqrt(v.X*v.X v.Y*v.Y) } func main() { v := &Vertex{3, 4} fmt.Println(v.Abs()) }
यहां, एब्स विधि एक पॉइंटर रिसीवर (*वर्टेक्स) प्राप्त करती है। हालाँकि, आपने देखा कि आप एक वैल्यू रिसीवर (वर्टेक्स) का भी उपयोग कर सकते हैं और समान परिणाम प्राप्त कर सकते हैं। यह कैसे संभव है?
रिसीवर और मूल्य प्रकार
गो व्युत्पन्न तरीकों की अनुमति देता है। पॉइंटर रिसीवर वाली एक विधि एक वैल्यू रिसीवर वाली विधि से विरासत में मिल सकती है। इसका मतलब यह है कि एक वैल्यू रिसीवर विधि, उदाहरण के लिए, func (v Vertex) Abs() फ्लोट64, स्वचालित रूप से एक पॉइंटर रिसीवर विधि उत्पन्न करती है:
func (v Vertex) Abs() float64 { return math.Sqrt(v.X*v.X v.Y*v.Y) } func (v *Vertex) Abs() float64 { return Vertex.Abs(*v) } // GENERATED METHOD
ऑटोमैटिक एड्रेस टेकिंग
एक अन्य महत्वपूर्ण विशेषता गो है स्वचालित पता लेना। स्पष्ट सूचक रिसीवर के बिना निम्नलिखित कोड पर विचार करें:
func (v *Vertex) Abs() float64 { return math.Sqrt(v.X*v.X v.Y*v.Y) } func main() { v := Vertex{3, 4} v.Abs() }
गो स्पष्ट रूप से एब्स विधि को पारित मूल्य का पता लेता है। यह निम्नलिखित के बराबर है:
vp := &v vp.Abs()
निष्कर्ष
गो में, कुशल पॉइंटर उपयोग के लिए रिसीवर प्रकारों की भूमिका और स्वचालित पता लेने की सुविधा को समझना महत्वपूर्ण है। आप वैल्यू रिसीवर विधियों से पॉइंटर रिसीवर विधियों को प्राप्त कर सकते हैं, और गो पॉइंटर्स का स्पष्ट रूप से उपयोग किए बिना मानों का पता स्वचालित रूप से पास कर देगा।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3