Я вижу несколько примеров кода с такими конструкциями:
type point struct {
x, y int
}
func newPoint() *point {
return &point{10, 20}
}
У меня есть опыт работы с C ++, и мне кажется, что это ошибка. Какова семантика такой конструкции? Выделена новая точка в стеке или куче?
Ответы:
Go выполняет анализ выхода указателя. Если указатель выходит из локального стека, что происходит в этом случае, объект размещается в куче. Если он не экранирует локальную функцию, компилятор может разместить его в стеке (хотя он не дает никаких гарантий; это зависит от того, может ли анализ выхода указателя доказать, что указатель остается локальным для этой функции).
источник
Документация Golang утверждает, что совершенно законно возвращать указатель на локальную переменную. Как я читаю здесь
https://groups.google.com/forum/?fromgroups=#!topic/golang-nuts/EYUuead0LsY
Похоже, компилятор видит, что вы возвращаете адрес, и просто помещает его в кучу для вас. Это обычная идиома в Go.
источник