गो में, फ़ंक्शन के लिए तर्क पास करना मूल्य द्वारा किया जाता है, जिसका अर्थ है कि तर्क में कोई भी बदलाव किया जाता है फ़ंक्शन के भीतर मूल चर में प्रतिबिंबित नहीं होते हैं। स्लाइस जैसे परिवर्तनशील डेटा प्रकारों के साथ काम करते समय यह समस्याग्रस्त हो सकता है, क्योंकि फ़ंक्शन के भीतर स्लाइस को जोड़ने से फ़ंक्शन के दायरे से परे मूल स्लाइस पर कोई प्रभाव नहीं पड़ेगा।
निम्न उदाहरण पर विचार करें:
nums := []int{1, 2, 3} func addToNumbs(nums []int) []int { nums = append(nums, 4) fmt.Println(nums) // []int{1, 2, 3, 4} } fmt.Println(nums) // []int{1, 2, 3}
इस उदाहरण में, AddToNumbs फ़ंक्शन अंक स्लाइस की एक प्रति लेता है और मान 4 जोड़ता है। यह केवल प्रतिलिपि को संशोधित करता है फ़ंक्शन, और मूल अंक स्लाइस फ़ंक्शन के बाहर अपरिवर्तित रहता है।
इस समस्या को हल करने के लिए, आपको स्लाइस को संदर्भ द्वारा पास करना होगा। ऐसा करने का एक तरीका स्लाइस पर एक पॉइंटर पास करना है:
func myAppend(list *[]string, value string) { *list = append(*list, value) }
स्लाइस पर एक पॉइंटर पास करके, फ़ंक्शन के भीतर किए गए कोई भी परिवर्तन सीधे मूल स्लाइस में प्रतिबिंबित होते हैं। हालाँकि, एक पॉइंटर पास करने का मतलब यह भी है कि फ़ंक्शन स्लाइस को उन तरीकों से संशोधित कर सकता है जिनकी आप उम्मीद नहीं कर सकते हैं, इसलिए पॉइंटर्स का सावधानीपूर्वक उपयोग करना महत्वपूर्ण है।
एक अन्य विकल्प फ़ंक्शन से संशोधित स्लाइस को वापस करना है, जैसा कि दिखाया गया है निम्नलिखित उदाहरण में:
func validate(obj Validatable, messages []ValidationMessage) []ValidationMessage { // Append to the accumulator and return it directly messages = append(messages, message) return messages }
इस मामले में, मान्य फ़ंक्शन संशोधित संदेश स्लाइस लौटाता है, जिससे स्लाइस पर पॉइंटर पास करने की आवश्यकता समाप्त हो जाती है।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3