[go] 로컬 구조체에 대한 포인터 반환

다음과 같은 구조를 가진 코드 샘플이 있습니다.

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의 일반적인 관용구입니다.


답변