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