In Golang scheint es keine Konstruktoren zu geben, aber es wird vorgeschlagen, dass Sie ein Objekt eines Strukturtyps mit einer Funktion zuweisen, die normalerweise mit "Neu" + TypName bezeichnet wird, zum BeispielGolang-Speicherlayout im Vergleich zu C++/C
func NewRect(x,y, width, height float) *Rect {
return &Rect(x,y,width, height)
}
Allerdings bin ich mir nicht sicher über das Speicherlayout von Go. In C/C++ bedeutet diese Art von Code, dass Sie einen Zeiger zurückgeben, der auf ein temporäres Objekt verweist, weil die Variable auf dem Stapel zugeordnet ist, und die Variable möglicherweise nach der Rückgabe der Funktion ein Papierkorb ist. Muss ich mich in Golang um so etwas sorgen? Denn es scheint kein Standard zu sein, der angibt, welche Art von Daten auf dem Stack zugewiesen werden und welche Art von Daten auf dem Heap zugewiesen werden.
Wie in Java scheint es einen spezifischen Hinweis darauf zu geben, dass der Basistyp wie int, float auf dem Stapel zugewiesen wird, andere vom Objekt abgeleitete Objekte werden auf dem Heap zugewiesen. Gibt es in Golang eine spezifische Diskussion darüber?
Es wird auf dem Haufen zugeordnet werden. Der Go-Compiler kann erkennen, wenn ein Objekt außerhalb des Stapels lebt, und es automatisch auf dem Heap zuweisen. Sie können es sehen, wenn Sie mit 'go build -gcflags '-m' kompilieren, um die Optimierungsentscheidungen zu sehen. – siritinga
@python: Deine Intuition war richtig, dass du dir keine Sorgen machen musst. In der Praxis ist es richtig, dass es auf dem Heap zugewiesen wird, aber Gos Speichermodell ist sehr einfach und Sie müssen wirklich nicht über Stacks und Heaps nachdenken. Sie können nur über Variablen nachdenken. Wenn Sie die Adresse von etwas annehmen, garantiert Go, dass diese Adresse immer gültig ist, solange Sie einen Zeiger darauf haben. Es sollte dir als Programmierer egal sein, wie das passiert. (obwohl es natürlich interessant sein kann darüber nachzudenken, wie es umgesetzt wird, und es gibt auch einige coole Sachen dort) – joshlf
danke für alle Ihre Jungs Antwort – python