Avatar ·

पॉइंटर्स या वैल्यू: Go में पैरामीटर और रिटर्न वैल्यू में * और & का उपयोग कब करें?

सभी को नमस्ते! मैंने हाल ही में Go सीखना शुरू किया है, और मुझे लगातार एक सवाल परेशान करता है: फंक्शन में पैरामीटर को पॉइंटर द्वारा कब पास करना चाहिए और वैल्यू द्वारा कब? और रिटर्न वैल्यू के साथ भी ऐसा ही है। मुझे लगता है कि पॉइंटर्स डेटा की कॉपी से बचने में मदद करते हैं, लेकिन Go में सब कुछ कॉपी होता है? या नहीं? मैंने एक छोटा उदाहरण लिखा है जहाँ मैं User स्ट्रक्चर बनाता हूँ और उसे मॉडिफाई करने की कोशिश करता हूँ: ```go type User struct { Name string Age int } func updateUser(u User) { u.Name = "New Name" // उम्मीद के अनुसार काम नहीं करता } func updateUserPtr(u *User) { u.Name = "New Name" // काम करता है } ``` लेकिन मुझे यह भ्रमित करता है: Go में सब कुछ वैल्यू द्वारा पास होता है, लेकिन slices और maps रेफरेंस की तरह व्यवहार करते हैं? या नहीं? मैंने पढ़ा है कि बड़े स्ट्रक्चर को पॉइंटर द्वारा पास करना बेहतर है ताकि कॉपी न हो, और छोटे को वैल्यू द्वारा। लेकिन "बड़ा" क्या माना जाए? 10 फील्ड? 20? या यह सिर्फ आकार के बारे में नहीं है? इसके अलावा, मुझे यह भी समझ नहीं आता कि फंक्शन से पॉइंटर कब रिटर्न करना चाहिए और वैल्यू कब।