Ich sehe einige Codebeispiele mit Konstrukten wie diesem:
type point struct {
x, y int
}
func newPoint() *point {
return &point{10, 20}
}
Ich habe C ++ - Hintergrund und es scheint mir ein Fehler zu sein. Was ist die Semantik eines solchen Konstrukts? Wird auf dem Stapel oder Heap ein neuer Punkt zugewiesen?
Antworten:
Go führt eine Zeiger-Escape-Analyse durch. Wenn der Zeiger dem lokalen Stapel entgeht, was in diesem Fall der Fall ist, wird das Objekt auf dem Heap zugewiesen. Wenn es der lokalen Funktion nicht entgeht, kann der Compiler es dem Stapel zuordnen (obwohl es keine Garantien gibt; es hängt davon ab, ob die Zeiger-Escape-Analyse beweisen kann, dass der Zeiger für diese Funktion lokal bleibt).
quelle
Die Golang "Dokumentation besagt, dass es vollkommen legal ist, einen Zeiger auf eine lokale Variable zurückzugeben." Wie ich hier lese
https://groups.google.com/forum/?fromgroups=#!topic/golang-nuts/EYUuead0LsY
Ich sehe so aus, als ob der Compiler sieht, dass Sie die Adresse zurückgeben und sie nur für Sie auf dem Heap machen. Dies ist eine gängige Redewendung in Go.
quelle