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