Strukturen auf dem Stack und Heap in Go: Wie hängt das mit der Garbage Collection zusammen?
Hallo zusammen! Ich habe gerade angefangen, Go nach C++ und Java zu lernen, und die Speicherzuweisung für Strukturen verwirrt mich sehr. In C++ bin ich es gewohnt, explizit zu kontrollieren, ob ich ein Objekt auf dem Stack (`MyClass obj;`) oder auf dem Heap (`MyClass* obj = new MyClass();`) erstelle. In Java ist alles immer auf dem Heap, und Referenzen sind auf dem Stack.
Aber in Go sehe ich, dass Strukturen sowohl als `myStruct := MyStruct{}` (anscheinend auf dem Stack) als auch als `myStruct := &MyStruct{}` (anscheinend auf dem Heap) erstellt werden können. Dabei hat Go einen Garbage Collector. Ich bin völlig verwirrt.
Zum Beispiel habe ich diesen Code:
```go
type User struct {
Name string
Age int
}
func createUser(name string, age int) *User {
u := User{Name: name, Age: age}
return &u // Ich gebe einen Pointer auf eine lokale Variable zurück!
}
```
In C++ wäre das undefiniertes Verhalten (dangling pointer). In Go funktioniert es. Heißt das, dass `u` immer auf dem Heap allokiert wird? Oder ist der Compiler intelligent und entscheidet selbst? Wie hängt das mit der Garbage Collection zusammen? Warum sagt man manchmal, dass in Go besser...