Avatar ·

Go में स्टैक और हीप पर स्ट्रक्चर का आवंटन: यह गार्बेज कलेक्शन से कैसे संबंधित है?

सभी को नमस्ते! मैंने C++ और Java के बाद अभी-अभी Go सीखना शुरू किया है, और स्ट्रक्चर के लिए मेमोरी आवंटन का सवाल मुझे बहुत भ्रमित करता है। C++ में मैं स्पष्ट रूप से नियंत्रित करने का आदी था कि मैं स्टैक पर ऑब्जेक्ट बना रहा हूँ (`MyClass obj;`) या हीप पर (`MyClass* obj = new MyClass();`)। Java में सब कुछ हमेशा हीप पर होता है, और रेफरेंस स्टैक पर होते हैं। लेकिन Go में मैं देखता हूँ कि स्ट्रक्चर को `myStruct := MyStruct{}` (जैसे स्टैक पर) और `myStruct := &MyStruct{}` (जैसे हीप पर) बनाया जा सकता है। इसके अलावा, Go में गार्बेज कलेक्टर है। मैं पूरी तरह से उलझ गया हूँ। उदाहरण के लिए, मेरे पास यह कोड है: ```go type User struct { Name string Age int } func createUser(name string, age int) *User { u := User{Name: name, Age: age} return &u // लोकल वेरिएबल का पॉइंटर लौटा रहा हूँ! } ``` C++ में यह अनडिफाइंड बिहेवियर (डैंगलिंग पॉइंटर) होता।