एक पॉइंटर के रूप में एक स्ट्रक्चर प्रकार का उपयोग करते समय (यानी, पॉइंटर रिसीवर के साथ, कंस्ट्रक्टर लौटने वाले ए, आदि), संरचना को एम्बेड करने (बी के रूप में) या उसके पॉइंटर (बी के रूप में) के बीच चयन के सूक्ष्म लेकिन महत्वपूर्ण परिणाम होते हैं।
शून्य मान
दो विकल्पों के शून्य मान काफी भिन्न हैं। एंबेडिंग बी सीधे अपने शून्य मान के साथ एक एम्बेडेड ऑब्जेक्ट बनाता है, जो उस पर तत्काल संचालन की अनुमति देता है:
type AObj struct { B }
var aObj AObj
aObj.Print() // Prints 0 (B's zero value)
इसके विपरीत, *बी को एम्बेड करने से शून्य पॉइंटर के साथ शून्य मान प्राप्त होता है, जो प्रत्यक्ष उपयोग को रोकता है:
type APtr struct { *B }
var aPtr APtr
aPtr.Print() // Panics (nil pointer dereference)
कॉपी करना
ऑब्जेक्ट कॉपी करने का व्यवहार एम्बेडिंग प्रकार पर निर्भर करता है। जब B को एक ऑब्जेक्ट के रूप में एम्बेड किया जाता है, तो कॉपी करने पर एक नया ऑब्जेक्ट बनाया जाता है:
type AObj struct { B }
aObj2 := aObj
aObj.X = 1
aObj2.Print() // Prints 0 (copy of B's zero value)
इसके विपरीत, पॉइंटर एम्बेडिंग (*बी) के साथ, मूल और कॉपी की गई दोनों वस्तुएं समान अंतर्निहित बी ऑब्जेक्ट साझा करती हैं, जो सिंक्रनाइज़ परिवर्तनों की अनुमति देती हैं:
type APtr struct { *B }
aPtr.B = &B{}
aPtr2 := aPtr
aPtr.X = 1
aPtr2.Print() // Prints 1 (shared underlying B)
इन अंतरों का कोड पठनीयता, रखरखाव और प्रदर्शन अनुकूलन के लिए व्यावहारिक प्रभाव है। स्ट्रक्चर एम्बेडिंग बनाम पॉइंटर एम्बेडिंग की सूक्ष्म बारीकियों को समझकर, डेवलपर्स सक्रिय रूप से संभावित नुकसान से बच सकते हैं और अपने विशिष्ट उपयोग के मामलों के लिए सबसे उपयुक्त दृष्टिकोण का लाभ उठा सकते हैं।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3