type point struct { x,y int}func newPoint() *point { return &point{10,20}* f( `. t3 H$ c1 s) t$ D
我有 C 背景,这对我来说似乎是错误的。这种结构的语义是什么?新点是分布在栈还是堆上?$ ~( ]3 Y" e- ]" [. V* J3 d6 F0 D
- }! T& a' U, v% f解决方案: 0 |6 q4 ]# j D1 U* I2 o
Go 执行指针逃逸分析。如果指针转换为本地堆栈,在这种情况下,它将在堆栈上分配对象。如果它不转换本地函数,编译器可以在堆栈上自由分配(尽管它没有任何保证;这取决于指针转换分析是否能证明指针保持在函数的本地)。