Devuelve el puntero a la estructura local


85

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?


1
Una pregunta similar (la respuesta enlaza con la documentación): stackoverflow.com/questions/12098435/…
Denys Séguret

@ DenysSéguret no es similar
mangusta

Respuestas:


109

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


13
Aquí hay una publicación de blog (descargo de responsabilidad: que escribí) que analiza el análisis de escape de Go un poco más de cerca: scvalex.net/posts/29
scvalex

@LilyBallard no obtuvo una respuesta completa. ¿Quiere decir que probar el hecho de escapar del puntero siempre es posible, mientras que probar el hecho de NO escapar no lo es?
mangusta

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.