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

गो पॉइंटर्स कुशल मेमोरी प्रबंधन कैसे सुनिश्चित करते हैं और वे विधि रिसीवर के साथ कैसे काम करते हैं?

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

How do Go pointers ensure efficient memory management and how do they work with method receivers?

गो में पॉइंटर्स को समझना

प्रोग्रामिंग की दुनिया में, पॉइंटर्स मेमोरी को प्रबंधित करने और डेटा तक कुशलता से पहुंचने में महत्वपूर्ण भूमिका निभाते हैं। गो, एक लोकप्रिय भाषा जो अपनी समरूपता और सरलता के लिए जानी जाती है, पॉइंटर्स को एक अनूठे तरीके से नियोजित करती है।

प्रदान किए गए गो कोड उदाहरण में:

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