Go में make() और new() फ़ंक्शंस की आवश्यकता क्यों है और उनमें क्या अंतर है?
सभी को नमस्कार! मैंने अभी-अभी Go सीखना शुरू किया है और दो built-in फ़ंक्शंस — make() और new() — में उलझ गया हूँ। दस्तावेज़ीकरण में लिखा है कि दोनों memory allocate करते हैं, लेकिन मुझे समझ नहीं आ रहा कि कब किसका उपयोग करूँ।
यहाँ एक सरल उदाहरण है जो मुझे भ्रमित करता है। मैं एक map और एक slice बनाना चाहता हूँ:
// विकल्प 1: new() के साथ
m := new(map[string]int)
s := new([]int)
// विकल्प 2: make() के साथ
m2 := make(map[string]int)
s2 := make([]int, 5)
पहला विकल्प compile हो जाता है, लेकिन map में m["key"] = 1 के माध्यम से value जोड़ने की कोशिश करने पर panic: assignment to entry in nil map मिलता है। slice के साथ भी समस्या है — s[0] = 10 nil pointer के साथ fail होता है। जबकि दूसरा विकल्प बढ़िया काम करता है।
यहाँ क्या magic है? map और slice के लिए new() काम क्यों नहीं करता? मैंने पढ़ा है कि new() pointer return करता है, जबकि make() नहीं, लेकिन यह नहीं बताता कि एक काम करता है और दूसरा नहीं। कृपया, एक नौसिखिए के लिए समझाएँ।