package main import ( "fmt" ) func test() *int { a := int(1) return &a } func main() { b := test() fmt.Printf("%d\n", *b) } 如上代码, 这里按理 test 内的变量都是栈空间,函数跑完就释放了。但是这个代码还能正常编译运行。 这是为啥? 是不是编译器做了栈逃逸,实际分配还是在堆空间?