Retourne le pointeur sur la structure locale

Je vois des exemples de code avec des constructions comme ceci:

type point struct { x, y int } func newPoint() *point { return &point{10, 20} } 

J’ai un arrière-plan C ++ et cela semble être une erreur pour moi. Quelles sont les sémantiques d’une telle construction? Un nouveau point est-il alloué sur la stack ou le tas?

Go effectue une parsing d’échappement du pointeur. Si le pointeur échappe à la stack locale, ce qu’il fait dans ce cas, l’object est alloué sur le tas. S’il n’échappe pas à la fonction locale, le compilateur est libre de l’allouer à la stack (bien que cela ne donne aucune garantie, cela dépend si l’parsing d’échappement du pointeur peut prouver que le pointeur rest local pour cette fonction).

Le Golang “La documentation indique qu’il est parfaitement légal de renvoyer un pointeur sur la variable locale.” Comme je lis ici

https://groups.google.com/forum/?fromgroups=#!topic/golang-nuts/EYUuead0LsY

J’ai l’impression que le compilateur voit que vous retournez l’adresse et que vous le faites juste pour vous. Ceci est un idiome commun dans Go.