Veo algunos ejemplos de código con construcciones como esta:
type point struct {
x, y int
}
func newPoint() *point {
return &point{10, 20}
}
Tengo experiencia en C ++ y me parece un error. ¿Cuál es la semántica de tal construcción? ¿Se asignan nuevos puntos en la pila o en el montón?
Respuestas:
Go realiza un análisis de escape del puntero. Si el puntero escapa de la pila local, lo que hace en este caso, el objeto se asigna en el montón. Si no escapa de la función local, el compilador es libre de asignarlo a la pila (aunque no ofrece garantías; depende de si el análisis de escape del puntero puede probar que el puntero permanece local a esta función).
fuente
La "Documentación de Golang establece que es perfectamente legal devolver un puntero a una variable local". Como leo aqui
https://groups.google.com/forum/?fromgroups=#!topic/golang-nuts/EYUuead0LsY
Parece que el compilador ve que devuelve la dirección y simplemente la pone en el montón por usted. Este es un modismo común en Go.
fuente