我看到一些具有如下结构的代码示例:
type point struct { x, y int } func newPoint() *point { return &point{10, 20} }
我有 C++ 背景,这对我来说似乎是错误的。这种构造的语义是什么?新点是在栈还是堆上分配的?
Go 执行指针逃逸分析。如果指针转义本地堆栈,在这种情况下,它会在堆上分配对象。如果它不转义本地函数,编译器可以自由地在堆栈上分配它(虽然它不做任何保证;这取决于指针转义分析是否可以证明指针保持在该函数的本地)。