Avatar ·

Go में make() और new() फ़ंक्शंस की क्या ज़रूरत है? क्या अंतर है?

सभी को नमस्ते! मैंने हाल ही में Go सीखना शुरू किया है और मैं समझ नहीं पा रहा हूँ कि मेमोरी आवंटित करने के लिए दो अलग-अलग फ़ंक्शंस: make() और new() की क्या ज़रूरत है। दोनों ही ऑब्जेक्ट बनाते हैं, लेकिन डॉक्यूमेंटेशन के उदाहरणों ने मुझे और भी उलझा दिया।

मैं यह करने की कोशिश कर रहा हूँ। मैं एक slice बनाना चाहता हूँ और उसमें तुरंत एलिमेंट जोड़ना चाहता हूँ:

package main

import "fmt"

func main() {
    // new के ज़रिए slice बनाने की कोशिश
    slice1 := new([]int)
    fmt.Println(slice1)  // आउटपुट: &[]
    // लेकिन एलिमेंट कैसे जोड़ूँ? slice1 = append(slice1, 1) काम नहीं करता
    // एरर: first argument to append must be slice; have *[]int

    // make के ज़रिए slice बनाने की कोशिश
    slice2 := make([]int, 5)
    fmt.Println(slice2) // आउटपुट: [0 0 0 0 0]
    // काम करता है, लेकिन लंबाई 5 क्यों है? क्या बिना लंबाई के संभव है?

    // map के साथ भी यही कहानी
    var m1 map[string]int
    // m1["key"] = 1 // panic: assignment to entry in nil map

    m2 := make(map[string]int)