Подтвердить что ты не робот

Вернуть указатель на локальную структуру

Я вижу несколько примеров кода с такими конструкциями:

type point struct {
  x, y int
}

func newPoint() *point {
  return &point{10, 20}
}

У меня есть фон С++, и для меня это похоже на ошибку. Какова семантика такой конструкции? Новая точка выделена в стек или куча?

4b9b3361

Ответ 1

Go выполняет анализ escape-указателя. Если указатель выходит из локального стека, который он делает в этом случае, объект выделяется в куче. Если он не скрывает локальную функцию, компилятор может свободно выделять его в стеке (хотя он не дает никаких гарантий, это зависит от того, может ли анализ escape-кода указателем остаться в этом месте).

Ответ 2

Документация "Голанг" гласит, что совершенно законно возвращать указатель на локальную переменную ". Поскольку я читаю здесь

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

Мне кажется, что компилятор видит, что вы возвращаете адрес и просто забираете его в кучу. Это общая идиома в Go.