एक सूचक एक स्मृति पता है। उदाहरण के लिए एक चर में स्मृति में एक पता है।
3 + 4
की तरह एक ऑपरेशन का परिणाम है क्योंकि कोई विशेष स्मृति इसके लिए आवंटित है वहाँ एक पता नहीं है। परिणाम प्रोसेसर रजिस्टरों में बस रह सकता है।
आप स्मृति जिसका पता आप नक्शे में डाल सकते हैं आवंटित करने के लिए किया है। सबसे आसान और सबसे सरल इसके लिए एक स्थानीय चर बनाने के लिए है।
x, y := 1, 2
m := map[string]*int{"x": &x, "y": &y}
d := *m["x"] + *m["y"]
m["d"] = &d
fmt.Println(m["d"], *m["d"])
आउटपुट (Go Playground पर यह कोशिश):
इस उदाहरण देखें
0x10438300 3
नोट: कोड के ऊपर एक समारोह, स्थानीय चर का पता में है, तो (d
) कि अगर हम फ़ंक्शन से वापस लौटते हैं तो भी हम मानचित्र में डालते रहेंगे (यानी map
वापस या बनाया गया है - उदाहरण के लिए एक वैश्विक चर)। जाओ में स्थानीय चर के पते को लेने और वापस करने के लिए यह पूरी तरह से सुरक्षित है। कंपाइलर कोड का विश्लेषण करेगा और यदि पता (सूचक) फ़ंक्शन से बच निकलता है, तो यह स्वचालित रूप से ढेर (और ढेर पर नहीं) पर आवंटित किया जाएगा। विवरण देखने के लिए FAQ: How do I know whether a variable is allocated on the heap or the stack?
नोट # 2: अन्य तरीके एक मूल्य (इस उत्तर में दिए गए विवरण के रूप में: How do I do a literal *int64 in Go?) के लिए सूचक बनाने के लिए हैं, लेकिन वे सिर्फ "चाल" कर रहे हैं और अच्छे नहीं या अधिक कुशल हैं। स्थानीय चर का उपयोग करना सबसे साफ और अनुशंसित तरीका है।
उदाहरण के लिए यह भी एक स्थानीय चर बनाने के बिना काम करता है, लेकिन यह स्पष्ट रूप से बिल्कुल सहज नहीं है:
m["d"] = &[]int{*m["x"] + *m["y"]}[0]
आउटपुट में ही है। इसे Go Playground पर आज़माएं।
ऐसी बात स्टोर करने के लिए क्यों चाहते हैं हैं? 'एम [" डी "] = एम [" एक्स "] + एम [" वाई "]' ऑपरेशन के परिणाम स्टोर करता है – fabrizioM