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

गो में एंबेडेड स्ट्रक्चर्स: वैल्यू बनाम पॉइंटर द्वारा कब एंबेड किया जाए?

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

Embedded Structs in Go: When to Embed by Value vs. by Pointer?

गो में एंबेडेड स्ट्रक्चर: पॉइंटर बनाम ऑब्जेक्ट

पॉइंटर रिसीवर्स के साथ काम करते समय और पॉइंटर प्रकारों का निर्माण करते समय, एक स्ट्रक्चर को एम्बेड करने के बीच के अंतर को समझना एक वस्तु (बी) बनाम एक सूचक (*बी) के रूप में महत्वपूर्ण हो जाता है। इस संदर्भ में, इन दो एम्बेडेड संरचना प्रकारों के शून्य मान काफी भिन्न हैं। संरचना ए के भीतर एक वस्तु, इसके शून्य मान में प्रकार बी की एक एम्बेडेड वस्तु शामिल होती है, जिसका स्वयं शून्य मान होता है। डेवलपर्स इस एम्बेडेड ऑब्जेक्ट और इसके तरीकों तक सुरक्षित रूप से पहुंच सकते हैं।

टाइप बी स्ट्रक्चर { एक्स इंट } func (बी *बी) प्रिंट() { fmt.Printf("%d\n", b.X) } AObj संरचना टाइप करें { बी } वर aObj AObj aObj.Print() // प्रिंट 0

पॉइंटर एंबेडिंग

type B struct {
    X int
}

func (b *B) Print() { fmt.Printf("%d\n", b.X) }

type AObj struct {
    B
}

var aObj AObj
aObj.Print() // prints 0

type APtr struct { *बी } वर एपीटीआर एपीटीआर aPtr.Print() // पैनिक्स

ऑब्जेक्ट कॉपी करना

type APtr struct {
    *B
}

var aPtr APtr
aPtr.Print() // panics

aObj2 := aObj aObj.X = 1 aObj2.Print() // प्रिंट करता है 0

पॉइंटर कॉपी करना

aObj2 := aObj
aObj.X = 1
aObj2.Print() // prints 0

aPtr.B = &B{} एपीटीआर2 := एपीटीआर एपीटीआर.एक्स = 1 aPtr2.Print() // प्रिंट 1

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

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

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

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

Copyright© 2022 湘ICP备2022001581号-3