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++ में यह अनडिफाइंड बिहेवियर (डैंगलिंग पॉइंटर) होता।