यदि आप type bar
के चर को घोषित या आवंटित करते हैं, तो आप rd uint8
और foo foo_
दोनों के लिए शून्य स्मृति को आरक्षित और प्रारंभ करते हैं। का एक चर हमेशा type bar
के चर में एम्बेड किया गया है।
var b bar // declare b
आप यह घोषणा करते या type barP
के एक चर आवंटित हैं, तो आप को आरक्षित और rd uint8
और foo *foo_
दोनों के लिए शून्य स्मृति को आरंभ कर देगा। शून्य मान सूचक एक nil
सूचक है। type foo_
का कोई चर आवंटित नहीं किया गया है; आपको इसे अलग से करना होगा। या तो शून्य (foo == nil
) या type foo_
का एक चर है जो type barP
के चर द्वारा इंगित किया गया है। type barP
का एक चर type foo_
के समान चर को type barP
के अन्य चर के रूप में इंगित कर सकता है, type foo_
के चर की एक ही प्रति साझा करना। एक साझा प्रति में परिवर्तन सभी चर द्वारा देखा जाता है जो इसे इंगित करता है।
var bp barP // declare bp
bp.foo = new(foo_) // allocate bp.foo
कौन सा उपयोग करने के लिए type bar
बनाम type barP
के गुणों पर निर्भर करता है। कौन सा प्रकार हल करने की कोशिश कर रहे समस्या को अधिक बारीकी से दर्शाता है?
उदाहरण के लिए, इस चालान समस्या पर विचार करें। हमारे पास हमेशा एक बिलिंग पता होता है; हम हमेशा हमारे पैसे मांगने जा रहे हैं। हालांकि, हम अक्सर बिलिंग पते पर जाते हैं, लेकिन हमेशा नहीं। यदि शिपिंग पता nil
है, तो बिलिंग पता का उपयोग करें। अन्यथा, एक अलग शिपिंग पता का उपयोग करें। हमारे पास दो गोदाम हैं, और हम हमेशा एक या दूसरे से जहाज भेजते हैं। हम दो गोदामों के स्थान साझा कर सकते हैं। चूंकि हम गोदाम से आदेश भेज दिए जाने तक चालान नहीं भेजते हैं, इसलिए गोदाम का स्थान कभी भी nil
नहीं होगा।
type address struct {
street string
city string
}
type warehouse struct {
address string
}
type invoice struct {
name string
billing address
shipping *address
warehouse *warehouse
}
जब 'टाइप बारप' का एक चर घोषित या आवंटित किया जाता है, तो foo का प्रारंभिक मान 'शून्य' सूचक होगा। – peterSO