Avatar ·

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...