गो में एंबेडेड स्ट्रक्चर: पॉइंटर बनाम ऑब्जेक्ट
पॉइंटर रिसीवर्स के साथ काम करते समय और पॉइंटर प्रकारों का निर्माण करते समय, एक स्ट्रक्चर को एम्बेड करने के बीच के अंतर को समझना एक वस्तु (बी) बनाम एक सूचक (*बी) के रूप में महत्वपूर्ण हो जाता है। इस संदर्भ में, इन दो एम्बेडेड संरचना प्रकारों के शून्य मान काफी भिन्न हैं। संरचना ए के भीतर एक वस्तु, इसके शून्य मान में प्रकार बी की एक एम्बेडेड वस्तु शामिल होती है, जिसका स्वयं शून्य मान होता है। डेवलपर्स इस एम्बेडेड ऑब्जेक्ट और इसके तरीकों तक सुरक्षित रूप से पहुंच सकते हैं।
टाइप बी स्ट्रक्चर { एक्स इंट } 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